一、集合的总体系
java集合类定义主要在java.util.*类中,常用的有3个接口:
java.util.Set接口及其子类,set提供的是一个无序的集合;
java.util.List接口及其子类,List提供的是一个有序的集合;
java.util.Map接口及其子类,Map提供了一个映射(对应)关系的集合数据结构在JDK5中新增了Queue(队列)接口及其子类,提供了基于队列的集合体系
二、Collection与Collections
Collection作为接口的父类,其下面有set,list接口;对于Collections是集合的工具类,提供了集合常见的操作方法,方便对集合的使用
三、Set接口与List接口
Set和List都是Collection的派生子类,Set是最简单的一种集合,它的对象不按照特定的排列方式排序,只是简单的把对象加入集合中,就想网口袋里放东西,不在乎顺序,但是,set有一个特点是不能放入重复的数据。List是一个线性集合,如数组,队列,栈,链表,都是线性的,没有特定的顺序,只有一个头一个尾,但是,与根本没顺序不同,它可以根据一定的顺序排列出来,排列的方式可以自定义。
四、 Map接口
Map接口不属于Collection接口,数据类型是以键值对key-value呈现。生活中也常遇见,比如Ip地址--主机,身份证--一个人等等,,这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象,即java.util.Map接口。Map是一个接口,有多种具体的实现类,常用的有HashMap和 Hashtable类实现。Map中存入的对象是一对一对的,即每个对象和它的一个名字(键)关联在一起,Map中数据存放的结构如下图示:
Key(键或名) | Value(key对应的值) |
“userName1” | UserInfo对象1 |
“userName1” | UserInfo对象1 |
“userName1” | UserInfo对象1 |
可以看出,Map中存放的是两种对象,一种称为key(键),一种称为value(值),它们在在Map中是一一对应关系,这一对对象又称做Map中的一个Entry(项);Map中的键不能重复,但值可以重复。
五、集合框架的层次结构
Collection是集合接口
|――――Set子接口:无序,不允许重复。
|――――List子接口:有序,可以有重复元素。
区别:Collections是集合类
Set和List对比:
Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。
Set和List具体子类:
Set
|――――HashSet:以哈希表的形式存放元素,插入删除速度很快。
List
|――――ArrayList:动态数组
|――――LinkedList:链表、队列、堆栈。
Array和java.util.Vector
Vector是一种老的动态数组,是线程同步的,效率很低,一般不赞成使用。
六、Iterator迭代器(接口)
Iterator是获取集合中元素的过程,实际上帮助获取集合中的元素。
迭代器代替了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同:
迭代器允许调用方利用定义良好的语义在迭代期间从迭代器所指向的集合移除元素。
方法名称得到了改进。
Iterator 仅有一个子接口ListIterator,是列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置。 ListIterator 没有当前元素;它的光标位置 始终位于调用 previous() 所返回的元素和调用 next() 所返回的元素之间。在长度为 n 的列表中,有 n+1 个有效的索引值,从 0 到 n(包含)。
七、Map接口子类介绍
Map将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射一个值。
Map接口是Dictionary(字典)抽象类的替代品。
Map 接口提供三种collection 视图,允许以键集、值集合或键-值映射关系集的形式查看某个映射的内容。映射的顺序 定义为迭代器在映射的 collection 视图中返回其元素的顺序。某些映射实现可明确保证其顺序,如 TreeMap 类;某些映射实现则不保证顺序,如 HashMap 类。
有两个常见的已实现的子类:
HashMap:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
TreeMap:它实现SortedMap 接口的基于红黑树的实现。此类保证了映射按照升序顺序排列关键字,根据使用的构造方法不同,可能会按照键的类的自然顺序 进行排序(参见 Comparable),或者按照创建时所提供的比较器进行排序。
Hashtable:此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。