数组是一种用连续空间来存储相同数据类型的线性数据结构。
ArrayList 的底层是使用动态的数组实现的。
ArrayList 的初始化容量是0,只有第一次添加的时候才会为10.
ArrayList 在进行扩容的时候都是上一次大小的1.5倍,每次扩容都需要拷贝数组。
ArrayList 添加元素的步骤
数组转换为List: 使用Arrays.asList();这个方法
List转换为数组: 使用List.toArray(); 这个方法
使用Arrays.asList() 转换的List,会受原先数组数据变动的影响。因为List的存储数据的数组指向了原先数组。
使用toArray() 转换的数组,不会受原先List数据变动的影响。因为底层实现的原理是将List的数据拷贝到数组。
ArrayList 的底层是基于动态数组去实现的。
LinkedList 的底层是基于双向链表实现的。
底层数据结构
ArrayList的底层是使用动态数组实现的。
LimkedList的底层是使用双向链表实现的。
操作数据效率
内存空间占用
ArrayList的底层是使用数组实现的,内存连续,节省内存。
LinkedList的底层是使用双向链表实现的,每个节点需要多俩个指针,更占用内存。
线程安全
ArrayList 和 LinkedList 都是非线程安全的
能够实现线程安全的方案:
1、尽量声明为局部变量
2、使用Collections.synchronizedList(),底层是加锁,相对应性能降低。