当先锋百科网

首页 1 2 3 4 5 6 7

一、集合框架图

简化图:

说明:对于以上的框架图有如下几点说明

1.所有集合类都位于java.util包下。Java的集合类主要由两个接口派生而出:CollectionMap,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。
2. 集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。
3. 抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。
4. 实现类:8个实现类(实线表示),对接口的具体实现。
5. Collection 接口是一组允许重复的对象。
6. Set 接口继承 Collection,集合元素不重复。
7. List 接口继承 Collection,允许重复,维护元素插入顺序。
8. Map接口是键-值对象,与Collection接口没有什么关系。
9.Set、List和Map可以看做集合的三大类:
List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。
Set集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是集合里元素不允许重复的原因)。
Map集合中保存Key-value对形式的元素,访问时只能根据每项元素的key来访问其value。

二、总体分析

大致说明:
看上面的框架图,先抓住它的主干,即Collection和Map

1、Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作和属性。Collection包含了List和Set两大分支。
(1)List是一个有序的队列,每一个元素都有它的索引。第一个元素的索引值是0。List的实现类有LinkedList, ArrayList, Vector, Stack。

(2)Set是一个不允许有重复元素的集合。Set的实现类有HastSet和TreeSet。HashSet依赖于HashMap,它实际上是通过HashMap实现的;TreeSet依赖于TreeMap,它实际上是通过TreeMap实现的。

2、Map是一个映射接口,即key-value键值对。Map中的每一个元素包含“一个key”和“key对应的value”。AbstractMap是个抽象类,它实现了Map接口中的大部分API。而HashMap,TreeMap,WeakHashMap都是继承于AbstractMap。Hashtable虽然继承于Dictionary,但它实现了Map接口。

3、接下来,再看Iterator。它是遍历集合的工具,即我们通常通过Iterator迭代器来遍历集合。我们说Collection依赖于Iterator,是因为Collection的实现类都要实现iterator()函数,返回一个Iterator对象。ListIterator是专门为遍历List而存在的。

4、再看Enumeration,它是JDK 1.0引入的抽象类。作用和Iterator一样,也是遍历集合;但是Enumeration的功能要比Iterator少。在上面的框图中,Enumeration只能在Hashtable, Vector, Stack中使用。

5、最后,看Arrays和Collections。它们是操作数组、集合的两个工具类。

---|Collection: 单列集合

                            ---|List:存储顺序(存入和取出的顺序相同), 可重复

                                     ---|ArrayList:         数组实现, 查找快, 增删慢

                                               由于是数组实现, 在增和删的时候会牵扯到数组

增容, 以及拷贝元素. 所以慢。数组是可以直接

按索引查找, 所以查找时较快

                                     ---|LinkedList:       链表实现, 增删快, 查找慢

                                               由于链表实现, 增加时只要让前一个元素记住自

己就可以, 删除时让前一个元素记住后一个元

, 后一个元素记住前一个元素. 这样的增删效

率较高但查询时需要一个一个的遍历, 所以效率

较低

                                     ---|Vector:        ArrayList原理相同, ArrayList线程安全,效率高,Vector线程安全, 效率略低

                                     ArrayList实现方式相同, 但考虑了线程安全问

, 所以效率略低

                            ---|Set: 无存储顺序(存入和取出的顺序不一定相同)

                                     ---|HashSet  基于哈希表方式,不可重复

                                     ---|TreeSet  底层二叉树结构

                                     ---|LinkedHashSet

---|Map: 键值对   key value值对方式存储

                   ---|HashMap底层为哈希表,使用键值对存储

                   ---|TreeMap底层红黑树结构

                   ---|HashTable底层为哈希表,使用键值对存储

                   ---|LinkedHashMap

---|Collection: 单列集合

                            ---|List:存储顺序(存入和取出的顺序相同), 可重复

                                     ---|ArrayList:         数组实现, 查找快, 增删慢

                                               由于是数组实现, 在增和删的时候会牵扯到数组

增容, 以及拷贝元素. 所以慢。数组是可以直接

按索引查找, 所以查找时较快

                                     ---|LinkedList:       链表实现, 增删快, 查找慢

                                               由于链表实现, 增加时只要让前一个元素记住自

己就可以, 删除时让前一个元素记住后一个元

, 后一个元素记住前一个元素. 这样的增删效

率较高但查询时需要一个一个的遍历, 所以效率

较低

                                     ---|Vector:        ArrayList原理相同, ArrayList线程安全,效率高,Vector线程安全, 效率略低

                                     ArrayList实现方式相同, 但考虑了线程安全问

, 所以效率略低

                            ---|Set: 无存储顺序(存入和取出的顺序不一定相同)

                                     ---|HashSet  基于哈希表方式,不可重复

                                     ---|TreeSet  底层二叉树结构

                                     ---|LinkedHashSet

---|Map: 键值对   key value值对方式存储

                   ---|HashMap底层为哈希表,使用键值对存储

                   ---|TreeMap底层红黑树结构

                   ---|HashTable底层为哈希表,使用键值对存储

                   ---|LinkedHashMap

 

转载于:https://www.cnblogs.com/lixinjun8080/p/10918362.html