1) arraylist
基于数组进行实现
fast-fail机制: 当一个线程进行list遍历时,另一个线程remove数组元素,会抛出异常,这即是fast-fail机制,进行list遍历时,是存在状态依赖,所以线程非安全
2) LinkedList
双向链表,存在内部类Node(jdk7.0),需要保存当前节点,下一个节点和后一个节点
3) HashMap
会根据hash算法来计算key-value的存储位置
初始容量:16 默认加载因子:0.75
内部实现还是数组,HashMap成员变量数组table 是Entry类型的内部类数组,table的每个元素都是一个链表
插入数据过程: 先判断key是否是null,若是插入null值;key不为null则计算key的hash值,从而在table数组中找到索引位置,若相应位置有元素,则判断是否存在相同的key,如果存在,则直接覆盖原来key的value,否则将该元素保存在链头
hash算法能够使得table的元素冲突少,而且充分利用存储空间,hash值一定是小于数组大小的,所以一般求hash值都会对数组大小进行去模
在进行扩容时,肯定会重新计算hash值,否则table元素位置的冲突不会被解决,扩容的临界点等于: hashmap中的数组table长度乘以加载因子
4) HashSet
底层是通过HashMap实现,即有一个HashMap类型的成员变量
5) Hashtable
线程安全类,类似与HashMap,但是有区别,比如不能存放key为null的键值对
6) hashcode
作用是寻域,比如HashMap中,先通过hashcode快速查找出在table中的位置;在put操作时,会先查找出元素在table中的位置,如果查找到的位置有元素,需要调用equals方法,通过hashcode区分不同的元素,可以降低执行equals方法的概率
7) TreeMap
基于红黑树算法