一、Collection接口
1、List接口 ,Set接口
2、ArrayLIst,LinkedList,Vector,Stack
3、HashSet,LinkedHashSet,TreeSet
二、Map接口
1、HashMap,LinkedHashMap,TreeMap;
三、Iterator 与 ListIterator
1、ListIterator有add()方法,可以向List中添加对象,而Iterator不能
2、ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。
3、ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。
4、都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。
集合特性:
1、是否允许空
2、是否允许重复数据
3、是否有序,有序的意思是读取数据的顺序和存放数据的顺序是否一致
4、是否线程安全
底层实现
ArrayList:动态数组(动态扩容),初始容量:10
LinkedList:循环双向链表
HashMap:初始容量:16
数组+链表(JDK1.8前)
HashMap 在底层将 key-value 当成一个整体进行处理,这个整体就是一个 Entry 对象。HashMap 底层采用一个 Entry[] 数组来保存所有的 key-value 对,当需要存储一个 Entry 对象时,会根据hash算法来决定其在数组中的存储位置,在根据equals方法决定其在该数组位置上的链表中的存储位置;当需要取出一个Entry时,也会根据hash算法找到其在数组中的存储位置,再根据equals方法从该位置上的链表中取出该Entry。
数组+链表+红黑树实现(JDK1.8中)
LinkedHashMap:
LinkedHashMap和HashMap的区别在于它们的基本数据结构上,看一下LinkedHashMap的 Entry 继承了 HashMap中的 Entry,并添加了 before,after 前置节点后后置节点 来实现链表;
并发集合
ConcurrentHashMap:锁分段技术
总结:
1、List中的数据可重复,Set中的数据不可重复;
2、Array,Linked,Tree,Stored前缀的都有序,否则无序;
3、带Hash的,都是通过hashcode值定位存储的;
4、带Linked的,都是通过链表维持顺序的;
5、Vector,HashTable 是线程同步的,其他是 非同步的;
参考资料: