1、List实现类的区别比较

1、ArrayList

  1. - list接口的主要实现类,其底层为一个动态的Object[] elementData数组,可实现数组的扩容。**线程不安全**,但使用效率高!
  2. - ArrayList的扩容机制(重点掌握):

step1、List list1=new ArrayList():创建一个ArrayList实体类对象,此时底层创建了一个Object [] elementData 数组,但此时并没有创建长度。
step2、调用list1.add()方法:若首次调用add()方法,进行元素的添加,底层才创建了一个长度为10的Object [] elementData 数组,并将元素放置在索引为0的位置。
step3、继续调用list1.add()方法,若此次元素的添加导致底层Object [] elementData 数组的长度不够,则进行扩容操作,默认情况下,将数组的容量扩容至原有容量的1.5倍,同时需要将原数组复制到新数组当中。
image.png

  -  **建议**开发中创建ArrayList实体类时,使用带参的构造器List list1=new ArrayList(int capacity)
  - 特点:按照索引进行存储,因此查询速度快,增删速度慢
  - 常用方法:增、删、改、查、遍历、插入、长度统计
  - ArrayList线程不安全的体现
        1. 判断elementData数组容量是否满足需求
        1. 在elementData对应位置上设置值

2、LinkedList

  - LinkedList是基于**双向循环链表**实现的,除了可以当做链表来操作外,它还可以当做栈、队列和双端队列来使用。

image.png

  - 随机访问读取效率较差,但顺序访问的效率较高,且增删速度块。

3、Vector(不常用)
一般在线程安全时使用。vector其大部分方法都是直接货间接同步的。