ArrayList 和 LinkedList
- ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全。
- ArrayList 是实现了基于动态数组的数据结构,LinkedList 基于链表的数据结构。 (Arraylist 底层使用的是Object数组;LinkedList 底层使用的是双向链表数据结构)
- 对于随机访问 get 和 set,ArrayList 觉得优于 LinkedList,因为 LinkedList 要移动指针。
- 对于在指定 index 位置新增和删除操作 add 和 remove,LinedList 比较占优势,因为 ArrayList 要移动数据。
- ArrayList的空 间浪费主要体现在在list列表的结尾会预留一定的容量空间,而LinkedList的空 间花费则体现在它的每一个元素都需要消耗比ArrayList更多的空间(因为要存放直接后继和直接前驱以及数据)。
- ArrayList中的操作不是线程安全的!所以,建议在单线程中才使用 ArrayList,而在多线程中可以选择 Vector 或者 CopyOnWriteArrayList。LinkedList线程安全的处理方法
方法一: List
方法二: 将 LinkedList 全部换成 ConcurrentLinkedQueue
在 jdk 1.8 中 stream 处理 ArrayList 效率比 LinkedList 效率高。
ArrayList 和 Vector
Vector类的所有方法都是同步的。可以由两个线程安全地访问一个Vector对象、但是一个线程访问Vector的话代码要
在同步操作上耗费大量的时间。
Arraylist不是同步的,所以在不需要保证线程安全时时建议使用Arraylist。
