列表
List, ArrayList, LinkedList, ArrayCopyOnWriteList, Vector
简述
1. 列表划分为线程安全和线程非安全两类,其中:
线程安全:
Vector
,
ArrayCopyWriteList
线程非安全:
ArrayList
,
LinkedList
2. 底层存储
数组:
ArrayList
Vecotr
ArrayCopyWriteList
链表:
LinkedList
3. 使用场景
ArrayList
- 底层为数组,适合随机访问
- 动态插入删除可能涉及到数组长度重新分配
- 底层为链表,适合频繁删除新增的场景
- 随机访问不友好,需要遍历
- 线程安全
- 所有的方法都加锁,导致性能较差
- 线程安全
- 读方法不加锁;修改方法加锁,一次只能一个线程访问
- 修改时,会拷贝一份内容出来,对拷贝的结果进行操作,最后覆盖之前的内容
4. 特性
-
是有序的List
-
默认空间大小为10ArrayList
-
内部的数组实际上引用的是一个空数组new ArrayList<>()
-
扩容规则ArrayList
- 增加原来空间大小的一半
- 如果依然塞不下,则扩充到正好填充满的情况
- 排序
-
Collections.sort(list, new Comparator(){xxx})
- List的内容,实现了
接口后,可以直接调用 Comparater
Collections.sort(list);