HashMap
在JDK1.8,HashMap由三部分组成,分别是 数组,单向链表以及红黑树(1.8添加)
1.key与value都可以是null
2.put时,会根据key的hash值在table数组中存放,如果hash值发生碰撞,则在该hash值的元素的后面,形成单向链表;当链表长度等于8时,单向链表会转化为红黑树
3.数据扩大时,HashMap会扩容,扩容条件是 当前容量 = 初始容量*扩容因子 , HashMap会扩大一倍。
4.HashMap设初始值时,最好设为2的倍数
5.单向链表转为红黑树的原因:当数据量上去后,单向链表的最大时间复杂度就是O(n),而红黑树则是O(lgn)
LinkedHashMap
继承HashMap, 就是在HashMap的基础上加了一个双向链表;LinkedHashMap中直接持有双向链表的头尾;LinkedHashMap是可以设置顺序的:插入顺序与存取顺序
1.LinkedHashMap的插入顺序:先插入的在第一个
2.LinkedHashMap 存取顺序:去除的元素会先被移除,然后插入到第一个位置。LRUCache就是使用的存取顺序的LinkedHashMap
ArrayList
内部有数组实现,初始长度10, 扩容是oldCount = oldCount + oldCount >> 1, 即扩大为原先的1.5倍。内部元素有顺序
LinkedList
双向链表实现,无序,存取很方便
这是我个人的心得,可能会有不是很准确的地方,见谅