ArrayList、LinkedList、CopyOnWriterArrayList这三者有什么区别?
- 首选ArrayList是个数组,所以可以通过下标查询,查询速度快。在使用add()添加元素的时候,正常情况下是在数组末尾添加,如果需要扩容那么这个添加操作就会变得很长,如果是通过下标的方式插入元素,难么即使是在不扩容的情况下也会变得耗费时间,因为这个下标的右边元素都要往右边移动一位。同时该集合是个线程不安全基本,不适合多线程。
- LinkedList实现了Deque接口,数据结构是链表,因此也拥有的链表的增删快的优点,同时也有链表查询需要遍历的缺点。同时也是线程不安全的集合,不适合多线程场景。
- CopyOnWritedArrayList 其数据结构是数组,大致上跟ArrayList差不多,和ArrayList不同的是,这个集合是线程安全的,这个集合在添加元素的时候会加锁,并且创建出一个新的数组,添加操作在新的数组上进行,但是读取操作在原来数组上进行,所以这个集合适合读多写少并且对数据实时性要求不高的场景。