List
悲观者从机会中看到困难。乐观者从困难中看到机会。
——温斯顿·丘吉尔
List 是一个有序的集合,允许重复元素。List 中的元素可以通过索引来访问和操作。
主要实现类:
ArrayList 基于动态数组实现,支持快速的随机访问和修改操作。插入和删除元素(特别是在中间位置)较慢,因为需要移动元素;如果有参构造按1.5倍扩容,如果是无参,第一次10,从第二次开始按1.5被扩容
ArrayList的扩容操作涉及到数组的复制和内存的重新分配,所以在频繁添加大量元素时,扩容操作可能会影响性能。为了减少扩容带来的性能损耗,可以在初始化ArrayList时预分配足够大的容量,避免频繁出发扩容操作。
之所以扩容是1.5倍,是因为1.5可以充分利用移位操作,减少浮点数或运算时间和运算次数。
Vector 与 ArrayList 类似,但线程安全(所有操作都被 synchronized 关键字修饰)。由于其同步机制,在多线程环境中使用时会比 ArrayList 慢;如果是无参,默认10,满后,就按2倍扩容,如果指定大小,每次直接按2倍扩。
LinkedList基于双向链表实现,插入和删除操作效率高(尤其是在链表头部或尾部),但随机访问速度较慢
Set是一个不允许重复元素的集合,无序存储
HashSet 基于哈希表实现,元素无序,不允许重复元素。插入、删除和查找的时间复杂度为 O(1)
底层是HashMap,即使用数组+单向链表+红黑树结构进行存储(jdk8)jdk8以前是 数组+单向链表
hashSet的hash值不等于 hashcode(),还经过了无符号位移16位
TreeSet: 基于红黑树实现,元素按自然顺序或自定义的比较器排序。插入、删除和查找的时间复杂度为 O(log n)

浙公网安备 33010602011771号