Java 集合框架源码剖析
Java集合框架主要有两种Collection和Map具体实现结构如下图所示:
对于实现Collection接口的子类他们都间接实现了Iterable接口
List接口的实现方式主要有两种:
1 底层采用数组的方式实现
对于使用数组实现的List结构主要的特性有能够快速的随机读写(时间复杂度O(1))
但是对元素的插入或者删除会有性能问题(时间复杂度O(n))
2 底层采用链表的方式实现
对于使用链表的List结构我由于底层使用的是链表我们能够快速的对List容器进行插入删除
但是不支持随机读写只能通过链表的遍历
List:一个有序(元素存入集合的顺序和取出的顺序一致)容器,元素可以重复,可以插入多个null元素,元素都有索引。常用的实现类有 ArrayList、LinkedList 和 Vector。
Set:一个无序(存入和取出顺序有可能不一致)容器,不可以存储重复元素,只允许存入一个null元素,必须保证元素唯一性。Set 接口常用实现类是 HashSet、LinkedHashSet 以及TreeSet。
Map是一个键值对集合,存储键、值和之间的映射。 Key无序,唯一;value 不要求有序,允许重复。Map没有继承于Collection接口,从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。
Map 的常用实现类:HashMap、TreeMap、HashTable、LinkedHashMap、ConcurrentHashMap
LinkedHashMap和TreeMap的区别他们的通过map.keySet()读取到的key都是有序的LinkedHashMap是按照插入的顺序有序而TreeMap是按照自定义的比较顺序。一个元素想插入到TreeMap中必须实现Comparable接口并重写comparTo方法