Java学习日记----集合
2012-12-08 00:45
267 查看
------- android培训、java培训、期待与您交流! ----------
1 Collection
|--List
|--ArrayList
|--LinkedList
|--Vector
|--Set
|--HashSet
|--TreeSet
1.1 为什么会出现这么多的容器?
因为每个容器对数据的存储方式都不同,这个存储方式就称为数据结构.
1.2 Collection中的共性方法
add(),size(),isEmpty(),contains(),clear(),remove(),removeAll(),retainAll().
1.3 集合中不存放对象实体,存放的都是地址值,或对象的引用.
1.4 迭代器
迭代器其实就是取出元素的方式,每个容器都有存和取的方式,因为每个容器的数据结构不一样,.虽然它们都具备存和取的动作,因为底层数据结构不一样,存取的方式也不一样,每个集合都有取出的方式,而一个方法不足以描述这个方式,需要多个功能来实现,于是就将这多个方式封装成对象,所以每个集合中都一个用于完成取出动作的类,这个类定义在集合的内部,可以直接访问集合的元素,因为每个集合的取出方式不一样,就将这些取出类进行向上抽取,形成一个接口--->Iterator接口.然后通过一个方法iterator()获取集合的取对象.
2 List
2.1 特点:元素是有序的,元素是可以重复的.因为List体系有索引.
在List中可以直接通过角标进行增删改查的操作.
2.2 ListIterator
List中特有的迭代器,Iterator的子接口,Iterator中只有三个方法,hasNext(),next (),remove(),而ListIterator中可以进行增删改查的操作.
2.3 List集合的具体对象
1> ArrayList:底层使用的数据结构是数组结构,查询速度很快,增删稍慢,元素越多越明 显,不同步.
2> LinkedList:底层使用的是链表数据结构,增删速度很快,查询稍慢,
3> Vector: 底层使用的数组数据结构,和ArrayList一样,Vector在Java1.0就出现了,而集合框架在Java1.2才出现.Vector无论增删查询都慢,且是同步的.Vector有其特有的取出方式--->枚举,但是因为枚举的名称以及其方法的名称过长,所以被迭代器取代了.
2.4 在JDk1.6中对LinkedList做了升级,将原来的addFirst(),addLast(),getFirst(),getLast(),removeFirst(),removeLast()分别替换成了offerFirst(),offerLast(),pickFirst (),pickLast(),pollFirst,pollLast().其中pollFirst和pollLast(),如果没有此元素时会返回null.
3 Set
3.1 特点:元素是无序的(存入和取出的顺序不一致),元素不可以重复.
注意:Set的功能和Collection是一致的.
3.2 Set的常见子类
1> HashSet:底层数据结构是哈希表,在哈希表中,如果哈希值相同,还有一次校验方式,会判断是否是同一个对象.
2> TreeSet:底层结构是二叉树,可以对集合中的元素进行排序.
3.3 HashSet是如何保证元素唯一性的?
是通过元素的两个方法,hashCode()和equals()来完成的,如果元素的哈希值相同,才会判断equals()方法的返回值是否为true,如果元素的哈希值不同,则不会调用equals()方法.所以一般的开发中定义一个类都会复写hashCode()和equals()方法.
3.4 Set集合排序
1> 第一种方法,让元素自身具备比较性--->元素实现Comparable接口,覆盖compareTo()方法,这种方式叫做元素的自然顺序,也叫做默认顺序.
2> 第二种方式,当元素自身不具备比较性时,或者所具备的比较性不是所需要的时候,这时就需要让集合自身具备比较性---->在集合初始化就具有了比较性---->定义一个类实现Comparator接口,在集合初始化的时候,将这个类的对象传入就可以了,
3>注意:当两种排序方式都存在时,以比较器为主.
4 泛型
4.1 通过尖括号"<>"定义要操作的引用数据类型.它是在JDK1.5后出现的新特性,用于解决安全问题,是一个类型安全机制.泛型可借鉴于数组--->明确里面所装的数据类型. 4.2 泛型的好处
1> 将运行时期出现的问题ClassCastException转移到了编译时期,方便于程序员解决问题,让运行时期的问题减少,这样更安全.
2> 避免了强制转换的麻烦.
4.3 泛型类
当类中要操作的引用开数据类型不确定时,早期是通过Object类来完成扩展的,有了泛型后,用泛型就可以了.
4.4 泛型方法
泛型类定义的泛型在整个类都有效如果方法被使用,如果泛型类的对象明确要操作的数据类型后,所要操作的数据类型,就已经固定了,为了让不同的方法可以操作不同的类型,那么就可以将泛型定义在方法上.
4.5 泛型限定
? extends E ---> 可以接收E类型或E的子类.
? super E ---> 可以接收E类型或E的父类.
5 Map
5.1 概述,Map集合存放的是键值对,是一对一对往里面存的,
5.2 共性方法:
1> 添加:put(K key,V value),putAll(Map<? extends K,? extends V> m)
2> 删除:clear(),remove(Object key),
3> 判断:containsKey(Objrct key),containsValue(Object value),iaEmpty().
4> 获取:get(Object key),size(),values(),entyrSet(),keySet(),
5> 注意:put()方法,重复键时,新的值会覆盖旧的值,方法会返回原来的值.
remove()的返回值为所删除的键所对应的值,它只能删除键.
entyrSet()和keySet()这两个方法,需要重点掌握.
5.3 Map的子类
1>Hashtable:底层是哈希表数据结构,不可以存入空健空值,在JDK1.0就出现了,线程同步,效率低.
2>HashMap:底层是哈希表数据结构,可以存入空健空值,线程不同步,在JDK1.2出现,效率高.
3>TreeMap:底层是二叉树数据结构,线程不同步,可以给集合的键排序,和TreeSet很像,其实Set的底层就是使用了Map集合.
5.4 Map集合的两种取出方式
1>keyset():将集合中所有的键都存入到Set集合中,因为Set具有迭代器,就可以取出所有的键,再通过get()方法取出所有的值.
2>entrySet():将Map集合中的所有映射关系都存入到Set集合中,而这个映射的关系的类型就是Map.Entry,Map.Entry是一个接口,里面提供了两个方法,getKey()和getValue(),通过这两个方法就可以取出映射关系中的键和值.
1 Collection
|--List
|--ArrayList
|--LinkedList
|--Vector
|--Set
|--HashSet
|--TreeSet
1.1 为什么会出现这么多的容器?
因为每个容器对数据的存储方式都不同,这个存储方式就称为数据结构.
1.2 Collection中的共性方法
add(),size(),isEmpty(),contains(),clear(),remove(),removeAll(),retainAll().
1.3 集合中不存放对象实体,存放的都是地址值,或对象的引用.
1.4 迭代器
迭代器其实就是取出元素的方式,每个容器都有存和取的方式,因为每个容器的数据结构不一样,.虽然它们都具备存和取的动作,因为底层数据结构不一样,存取的方式也不一样,每个集合都有取出的方式,而一个方法不足以描述这个方式,需要多个功能来实现,于是就将这多个方式封装成对象,所以每个集合中都一个用于完成取出动作的类,这个类定义在集合的内部,可以直接访问集合的元素,因为每个集合的取出方式不一样,就将这些取出类进行向上抽取,形成一个接口--->Iterator接口.然后通过一个方法iterator()获取集合的取对象.
2 List
2.1 特点:元素是有序的,元素是可以重复的.因为List体系有索引.
在List中可以直接通过角标进行增删改查的操作.
2.2 ListIterator
List中特有的迭代器,Iterator的子接口,Iterator中只有三个方法,hasNext(),next (),remove(),而ListIterator中可以进行增删改查的操作.
2.3 List集合的具体对象
1> ArrayList:底层使用的数据结构是数组结构,查询速度很快,增删稍慢,元素越多越明 显,不同步.
2> LinkedList:底层使用的是链表数据结构,增删速度很快,查询稍慢,
3> Vector: 底层使用的数组数据结构,和ArrayList一样,Vector在Java1.0就出现了,而集合框架在Java1.2才出现.Vector无论增删查询都慢,且是同步的.Vector有其特有的取出方式--->枚举,但是因为枚举的名称以及其方法的名称过长,所以被迭代器取代了.
2.4 在JDk1.6中对LinkedList做了升级,将原来的addFirst(),addLast(),getFirst(),getLast(),removeFirst(),removeLast()分别替换成了offerFirst(),offerLast(),pickFirst (),pickLast(),pollFirst,pollLast().其中pollFirst和pollLast(),如果没有此元素时会返回null.
3 Set
3.1 特点:元素是无序的(存入和取出的顺序不一致),元素不可以重复.
注意:Set的功能和Collection是一致的.
3.2 Set的常见子类
1> HashSet:底层数据结构是哈希表,在哈希表中,如果哈希值相同,还有一次校验方式,会判断是否是同一个对象.
2> TreeSet:底层结构是二叉树,可以对集合中的元素进行排序.
3.3 HashSet是如何保证元素唯一性的?
是通过元素的两个方法,hashCode()和equals()来完成的,如果元素的哈希值相同,才会判断equals()方法的返回值是否为true,如果元素的哈希值不同,则不会调用equals()方法.所以一般的开发中定义一个类都会复写hashCode()和equals()方法.
3.4 Set集合排序
1> 第一种方法,让元素自身具备比较性--->元素实现Comparable接口,覆盖compareTo()方法,这种方式叫做元素的自然顺序,也叫做默认顺序.
2> 第二种方式,当元素自身不具备比较性时,或者所具备的比较性不是所需要的时候,这时就需要让集合自身具备比较性---->在集合初始化就具有了比较性---->定义一个类实现Comparator接口,在集合初始化的时候,将这个类的对象传入就可以了,
3>注意:当两种排序方式都存在时,以比较器为主.
4 泛型
4.1 通过尖括号"<>"定义要操作的引用数据类型.它是在JDK1.5后出现的新特性,用于解决安全问题,是一个类型安全机制.泛型可借鉴于数组--->明确里面所装的数据类型. 4.2 泛型的好处
1> 将运行时期出现的问题ClassCastException转移到了编译时期,方便于程序员解决问题,让运行时期的问题减少,这样更安全.
2> 避免了强制转换的麻烦.
4.3 泛型类
当类中要操作的引用开数据类型不确定时,早期是通过Object类来完成扩展的,有了泛型后,用泛型就可以了.
4.4 泛型方法
泛型类定义的泛型在整个类都有效如果方法被使用,如果泛型类的对象明确要操作的数据类型后,所要操作的数据类型,就已经固定了,为了让不同的方法可以操作不同的类型,那么就可以将泛型定义在方法上.
4.5 泛型限定
? extends E ---> 可以接收E类型或E的子类.
? super E ---> 可以接收E类型或E的父类.
5 Map
5.1 概述,Map集合存放的是键值对,是一对一对往里面存的,
5.2 共性方法:
1> 添加:put(K key,V value),putAll(Map<? extends K,? extends V> m)
2> 删除:clear(),remove(Object key),
3> 判断:containsKey(Objrct key),containsValue(Object value),iaEmpty().
4> 获取:get(Object key),size(),values(),entyrSet(),keySet(),
5> 注意:put()方法,重复键时,新的值会覆盖旧的值,方法会返回原来的值.
remove()的返回值为所删除的键所对应的值,它只能删除键.
entyrSet()和keySet()这两个方法,需要重点掌握.
5.3 Map的子类
1>Hashtable:底层是哈希表数据结构,不可以存入空健空值,在JDK1.0就出现了,线程同步,效率低.
2>HashMap:底层是哈希表数据结构,可以存入空健空值,线程不同步,在JDK1.2出现,效率高.
3>TreeMap:底层是二叉树数据结构,线程不同步,可以给集合的键排序,和TreeSet很像,其实Set的底层就是使用了Map集合.
5.4 Map集合的两种取出方式
1>keyset():将集合中所有的键都存入到Set集合中,因为Set具有迭代器,就可以取出所有的键,再通过get()方法取出所有的值.
2>entrySet():将Map集合中的所有映射关系都存入到Set集合中,而这个映射的关系的类型就是Map.Entry,Map.Entry是一个接口,里面提供了两个方法,getKey()和getValue(),通过这两个方法就可以取出映射关系中的键和值.
相关文章推荐
- 黑马程序员_Java学习日记10_集合框架2
- Java基础第十六天学习日记_Map集合
- java学习日记_86:集合框架之 LinkedHashSet和 TreeSet
- 黑马程序员Java学习日记(5)集合(二)
- java学习日记_75:集合框架之对象数组和集合的引入
- 黑马程序员--Java学习日记之集合(map集合和collections类)
- java学习日记_80:集合框架之ArrayList
- Java学习日记-11 集合(1)
- java学习日记_85:集合框架之set接口
- 黑马程序员_JAVA学习日记_JAVA中API:集合框架2(Map集合及其子集合)
- Java基础第十四天学习日记_集合、List集合、Set集合
- 黑马程序员_Java学习日记8_集合框架1
- 黑马程序员_JAVA学习日记_JAVA中API:集合框架1(Collection,List,Set及其子类和迭代器的应用)
- MongoDB学习日记 - java代码(三):数据库与集合操作
- java学习日记_82:集合框架之泛型的学习
- Java学习日记-12 集合(2)
- Java学习日记(九)Collection、泛型、Map集合、Collections&Arrays、增强for语句、可变参数、静态导入
- 黑马程序员--Java学习日记之集合(collection类和map类代码)
- 【笨鸟先飞】Java重新学习日记7---高级数组之集合
- 黑马程序员java学习日记——集合框架