一、线程安全的集合类:
1、向量类 Vertor : 除了多了同步方法,其他的和ArrayList是一样的。底层是数组
2、栈类 Stack 先进后去
3、哈希表 Hashtable : 除了多了同步方法,其他的HashMap一样的,但是key和value都不能为null,而HashMap可以为null
二、非线程安全的集合类
规则集:
1、散列集 HashSet
无序,底层是HashMap
2、链式散列集 LinkedHashSet
插入顺序,用链表实现来扩展HashSet 底层是LinkedHashMap
3、树形集 TreeSet
按比较器顺序, 底层是 TreeMap
线性表:
1、ArrayList 底层是数组, 随机访问元素优先使用
2、LinkedList 底层是双向链表, 随机插入和删除优先使用
图:
1、散列图 HashMap
无序,底层是 Entry[]数组,数组中的每一项又是一个链表
jdk8以前是使用数组和链表存储,jdk8以后采用了数组、链表和红黑树存储
当我们往HashMap中put元素的时候,先根据key的hashCode重新计算hash值,根据hash值得到这个元素在数组中的位置(即下标), 如果数组该位置上已经存放有其他元素了,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放在链尾。如果数组该位置上没有元素,就直接将该元素放到此数组中的该位置上。
2、链式散列图 LinkedHashMap
插入顺序 或 访问顺序 底层:哈希表(格式像数组链表的组合)和链接列表
LinkedHashMap 实现与 HashMap 的不同之处在于,LinkedHashMap 维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。
3、树形图 TreeMap
按比较器顺序 底层是红黑树