1. ArrayList
(1) 由数组组成,
(2) 初始化容量为10
(3) 每次扩容为原来的1.5倍
(4) 查询速度快,增删改速度慢
(5) 支持重复元素及null元素
(6) 有序
(7) 开发建议:在已知容量的情况下,需要初始化容量;
如果已知容量小于10,则不需要指定容量;
2. LinkedList
(1) 由链表组成
(2) 查询速度慢,增删改速度快
(3) 有序
3. LinkedHashMap
(1) 由数组、链表组成,继承了HashMap
(2) 有序,即根据数据插入顺序进行存储,增加了字段 final boolean accessOrder
(3) 遍历Map
4. TreeMap
(1) 红黑树
(2) 根据key进行自动排序,默认升序
(3) 降序排序
5. HashMap
(1) 由数组、链表、红黑树组成
(2) 数据结构
(3) 无序的
(4) 通过对Key的hashcode进行哈希算法获取到数组下标,哈希算法存在相同的情况转化为链表,当链表长度大于8时,会转化为红黑树,因为红黑树查询速度快
(5) 数据获取原理
(6) 数据插入原理
(7) 扩容
当hashmap中的元素个数超过数组大小*loadFactor时,就会进行数组扩容(resize()方法),loadFactor的默认值为0.75,数组大小为16,那么当hashmap中元素个数超过16*0.75=12的时候,就把数组的大小扩展为2*16=32,即扩大一倍,然后重新计算每个元素在数组中的位置,而这是一个非常消耗性能的操作,所以如果我们已经预知hashmap中元素的个数,那么预设元素的个数能够有效的提高hashmap的性能。比如说,我们有1000个元素new HashMap(1000) 也避免了resize的问题。
(8) 线程不安全:主要体现在多线程高并发的情况下,put操作(Hash碰撞和扩容)发生死循环、数据重复、数据覆盖等问题。