1、List实现类的区别比较
1、ArrayList
- list接口的主要实现类,其底层为一个动态的Object[] elementData数组,可实现数组的扩容。**线程不安全**,但使用效率高!
- ArrayList的扩容机制(重点掌握):
step1、List list1=new ArrayList():创建一个ArrayList实体类对象,此时底层创建了一个Object [] elementData 数组,但此时并没有创建长度。
step2、调用list1.add()方法:若首次调用add()方法,进行元素的添加,底层才创建了一个长度为10的Object [] elementData 数组,并将元素放置在索引为0的位置。
step3、继续调用list1.add()方法,若此次元素的添加导致底层Object [] elementData 数组的长度不够,则进行扩容操作,默认情况下,将数组的容量扩容至原有容量的1.5倍,同时需要将原数组复制到新数组当中。
- **建议**开发中创建ArrayList实体类时,使用带参的构造器List list1=new ArrayList(int capacity)
- 特点:按照索引进行存储,因此查询速度快,增删速度慢
- 常用方法:增、删、改、查、遍历、插入、长度统计
- ArrayList线程不安全的体现
1. 判断elementData数组容量是否满足需求
1. 在elementData对应位置上设置值
2、LinkedList
- LinkedList是基于**双向循环链表**实现的,除了可以当做链表来操作外,它还可以当做栈、队列和双端队列来使用。
- 随机访问读取效率较差,但顺序访问的效率较高,且增删速度块。
3、Vector(不常用)
一般在线程安全时使用。vector其大部分方法都是直接货间接同步的。