ArrayList和LinkedList区别
这是一道比较经典的面试题
主要不同点:
数据结构不同
效率不同
空间灵活性和占用内存不同
注意点:
在新建ArrayList的时候最好指定初始化大小,防止频繁扩容影响效率
在jdk1.7中ArrayList默认初始化大小为10,每次扩容0.5(1.5倍)【饿汉式】
在jdk1.8中ArrayList默认为空数组,第一次add的时候会设置为10,如果满了再自动扩容【懒汉式】
1.LinkedList实现了Deque接口,可以作为双端队列使用
2.因为数据结构不同,ArrayList是数组结构,LinkedList是双向链表结构
ArrayList指定下标查询的时候有优势,因为数组是提前分配好内存空间的
LinkedList指定下标(get)查询时候需要去遍历这个链表,才能找到指定下标位置
当随机访问List(get和set操作)时,ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。ArrayList对于数据查询非常快,但是插入与删除元素比较慢
当对数据进行增加和删除的操作(add和remove操作)时,LinkedList是恰好相反的,它的查询速度非常慢,但是插入与删除元素的速度非常快。
ArrayList进行新增Add操作的时候,会把当前待插入元素添加到最后的一个位置
- 如果不需要进行扩容是非常快速的,如果需要扩容会有扩容成本
如果数组指定的位置有元素了,则会把指定元素后的元素挨个往后移动,会导致效率低
1
arraylist.add(1,1);
LinkedList进行新增Add操作的时候,只需要遍历找到对应下标,然后替换对应元素的next和prev的操作
- LinkedList没有扩容操作,因为是链表结构,只需要指定下一个节点
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 喵喵鱼塘!