ArrayList和LinkedList的区别
1. 数据结构
- ArrayList底层数据结构是由数组构成的,可以当做一个自动扩容的动态数组使用
- LinkedList底层数据结构是由双向链表构成的,可以当做堆栈队列,双端队列等使用.
- 两者都是对List接口的实现,对List接口的方式有自己的实现
- 为了序列化,都实现了Serializable接口,参数里面有serialVersionUID字段
2.效率
- 随机访问效率
在进行随机访问的时候,ArrayList的效率通常比LinkedList高,因为从数据结构来看,ArrayList结构是由可以随机访问的数组构成,而LinkedList是由链表构成,在访问的时候,只能移动指针从一端到另一端
- 增删效率
LinkedList的效率更高,因为链表可以很方便的从任何地方进行插入,但是ArrayList数组在增删的时候需要对数据的后续所有数据进行移动,在数据较多的时候比较影响效率
3.空间
ArrayList主要控件开销在于需要在List列表预留一定空间;而LinkList主要控件开销在于需要存储结点信息以及结点指针信息。
ArrayList
1.预设容量
在使用之前最好对自己的数据集进行一个估算,然后初始化的时候进行数组的设置 .
因为在达到初始化数组上限之后,arraylist会进行一个扩容操作影响效率,我们要尽量避免频繁的扩容
jdk 1.8 初始容量为10,每次扩容大小变为原来的1.5倍