面试题10-ArrayList-LinkedList

ArrayList

  • 基于动态数组,连续内存存储,适合下标访问(随机访问)
  • 扩容机制:因为数组长度固定,超出长度存数据时需要新建数组,然后将老数组的数据拷贝到新数组。
    • 不使用尾插:还会涉及到元素的移动
    • 使用尾插:并且指定初始内容可以极大提高性能,甚至超过linkedList(因为LinkedList需要创建node对象)

LinkedList

  • 基于链表,可以存储在分散的内存中,适合做数据插入及删除操作,不适合查询,需要逐一遍历。
  • 缺点:遍历LinkedList必须使用iterator不能使用for循环,因为每次for循环体内通过get(i)取得某一元素时都需要对list重新进行遍历,性能消耗极大。

区别

  • ArrayList 与 LinkedList 都是 List 接口的实现类,因此都实现了 List 的所有未实现的方法,只是实现的方式有所不同。

  • ArrayList 是基于动态数组数据结构的实现,访问元素速度优于 LinkedList。LinkedList 是基于链表数据结构的实现,占用的内存空间比较大,但在批量插入或删除数据时优于 ArrayList。

  • 对于快速访问对象的需求,使用 ArrayList 实现执行效率上会比较好。需要频繁向集合中插入和删除元素时,使用 LinkedList 类比 ArrayList 类效果高。

原文地址:https://www.cnblogs.com/jsit-dj-it/p/15470314.html