第3题:ArrayList和LinkedList有什么区别
📚 回答:
-
底层实现:
ArrayList基于数组 实现,LinkedList基于链表实现。
-
随机访问性能:
ArrayList的随机访问速度快,因为根据下标可以直接定位到目标元素,时间复杂度为O(1)。LinkedList的随机访问速度慢,因为它需要从头节点开始沿着链表逐一查找,时间复杂度为O(n)。
-
插入和删除性能:
- 头部和尾部操作 :
LinkedList在头部和尾部插入、删除元素的性能高,因为只需要调整指针即可。ArrayList在尾部插入、删除元素的性能也不错,但头部或中间位置的操作会涉及大量数据移动,性能较差。
- 中间位置操作 :
ArrayList在中间位置插入或删除元素时,需要移动后续所有元素,因此性能较低。LinkedList在中间位置插入或删除元素时,虽然不需要移动数据,但需要从头遍历找到目标位置,耗时主要在遍历动作上。因此,中间位置的操作性能可能比ArrayList还低。
- 头部和尾部操作 :
💡 面试官视角:
- 面试官可能会问"为什么
ArrayList适合随机访问?"答:因为数组通过内存地址连续存储,直接通过下标计算偏移量就能快速定位元素。 - 面试官可能会追问"什么时候用
LinkedList?"答:当频繁在头部或尾部进行插入、删除操作时,LinkedList更高效;而如果主要是随机访问或尾部操作,ArrayList更合适。