天天看点

Java List 学习小结

列表

List, ArrayList, LinkedList, ArrayCopyOnWriteList, Vector

简述

1. 列表划分为线程安全和线程非安全两类,其中:

线程安全: ​

​Vector​

​​, ​

​ArrayCopyWriteList​

线程非安全:​

​ArrayList​

​​, ​

​LinkedList​

2. 底层存储

数组: ​

​ArrayList​

​​ ​

​Vecotr​

​​ ​

​ArrayCopyWriteList​

链表:​

​LinkedList​

3. 使用场景

​ArrayList​

  • 底层为数组,适合随机访问
  • 动态插入删除可能涉及到数组长度重新分配
  • 底层为链表,适合频繁删除新增的场景
  • 随机访问不友好,需要遍历
  • 线程安全
  • 所有的方法都加锁,导致性能较差
  • 线程安全
  • 读方法不加锁;修改方法加锁,一次只能一个线程访问
  • 修改时,会拷贝一份内容出来,对拷贝的结果进行操作,最后覆盖之前的内容

4. 特性

  • ​List​

    ​ 是有序的
  • ​ArrayList​

    ​ 默认空间大小为10
  • ​new ArrayList<>()​

    ​ 内部的数组实际上引用的是一个空数组
  • ​ArrayList​

    ​ 扩容规则
  • 增加原来空间大小的一半
  • 如果依然塞不下,则扩充到正好填充满的情况
  • 排序
  • ​Collections.sort(list, new Comparator(){xxx})​

  • List的内容,实现了​

    ​Comparater​

    ​接口后,可以直接调用 ​

    ​Collections.sort(list);​