java的集合框架包括存放对象的Collection<E>及存放键值对的Map<K,V>两大模块,下面就一一介绍下java集合的整齐框架。
一:List集合分支
1.1 Collection<E>分支的分支图:
1.2 上图主要类或者几口的介绍
a) Iterable<T>: 主要提供一个返回一个Iterator<T>对象方法
b)Collection<E>: 集合的根接口,实现了Iterator<T>接口,提供一些集合的基本方法。增加add系列、包含contains系列、移除remove系列、为空、大小、
及转化为iterator迭代器等方法。
c1) List<E>:有序的 collection(也称为序列)。此接口的增加一些有序的插入及检索元素,或者通过元素检索下标的方法,用户可以对列表中每元素的位置
进行精确地控制。
c2)Set<E>:一个不包含重复元素的 collection。更确切地讲,set 不包含满足e1.equals(e2)
的元素对e1
和 e2
,并且最多包含一个 null 元素。
d1) AbstractList<E>:此类提供 List 接口的骨干实现,实现了接口里迭代器及get(int)、set(int, E)、add(int, E) 和 remove(int)一部分接口里方法,所以它还是个抽象类。
d2) AbstractSet<E>:此类提供 Set 接口的骨干实现,从而最大限度地减少了实现此接口所需的工作,此类并没有重写AbstractCollection 类中的任何实现,
它仅仅添加了 equals 和 hashCode 的实现。
e1) ArrayList<E>和Vector<E>都是可以有重复对象的具体实体类,ArrayList<E>是非线程安全的,Vector<E>是线程同步的,是线程安全的。
e2) HashSet<E>:此类实现 Set 接口,由哈希表(实际上是一个HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许
使用 null 元素。
f1) LinkedList<E>是链表类型的集合对象,使用碎片内存,插入和删除方便。
f2) LinkedHashSet<E>:具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。此实现与HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接
列表。此链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代
1.3Collection<E>分支的介绍
Collection<E>的主要是用来保存对象的可扩展集合抽象接口,主要有两个分支List<E>和Set<E>.List里允许有重复元素,Set里不支持重复元素。
1.3.1 List<E>分支介绍
List<E>三个实现子类分别是ArrayList,Vector,LinkedList. ArrayList,Vector都是数组类型的集合对象,区别是ArrayList不是线程同步的,Vector是现场同步的,LinkedList是链表形式的。下面是三个子对象的对比,由于ArrayList,Vector是数组类型的数据对象,获取对应位置的元素直接通过下标就可以获取,插入和删除比较麻烦,要整体移动插入或者删除位置以后的所有元素。LinkedList是链表形式的数据,插入元素只需要改变下指针位置即可,但是获取对应位置的元素就较为麻烦,每次都需要从头遍历。在实际项目里,要合理评估自己需求的特点,合理选择对应的数据结构。
类型 | 线程同步 | 优点 | 缺点 |
ArrayList | 否 | 获取对应位置元素方便 | 插入或者删除元素麻烦 |
Vector | 是 | 获取对应位置元素方便 | 插入或者删除元素麻烦 |
LinkedList | 否 | 插入或者删除元素方便 | 获取对应位置元素麻烦 |
(三种List子对象的对比图)
1.3 2 Set分支介绍
Set<E>有很多子类,上图只画出常用的两个HashSet<E>, LinkedHashSet<E>两种种常用的。
类型 | 相同 | 不同 |
HashSet<E> | 无重复元素 | 元素没有顺序 |
LinkedHashSet<E> | 无重复元素 | 元素有顺序,内部是双链表 |
二:Map<K ,V>的分支
2.1 介绍
存放键值对的对象,例如生活中的办的购物卡,手机号是你的key值,你的个人信息就是value,去超市买东西,只要通过手机号们就可以知道你的名字,
余额,消费记录等信息,像这种有关联关系的就可以使用Map<K ,V>.
2.2 结构图
2.3 主要类及接口的介绍
a)Map<K,V>: 将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
b)AbstractMap<K,V>: 此类提供 Map 接口的骨干实现,以最大限度地减少实现此接口所需的工作
c1) HashMap<K,V>:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键,此类不保证映射的顺序。
c2)TreeMap<K,V>:基于红黑树(Red-Black tree)的 NavigableMap 实现
c3) WeakHashMap: 以弱键 实现的基于哈希表的 Map。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收
d) LinkedHashMap<K,V>: Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序