ArrayList 与 LinkedList 的区别

ArrayList 使用一个内置的数组来存储元素,这个数组的起始容量为 10。当数组需要增长时,新的容量按以下公式获得:新容量=旧容量*3/2+1,也就是说每次容量大概增长 50%。这就意味着,如果你有一个包含大量元素的 ArrayList 对象,那么最终将会有很大的空间被浪费掉,这个浪费由 ArrayList 本身的工作方式导致。

LinkedList 则是基于链表的动态数组。

ArrayList 和 LinkedList 在性能上各有优缺点,都有各自所使用的地方,总的来说可以描述如下:

  • 对 ArrayList 和 LinkedList 而言,在列表末尾增加一个元素所花的开销都是固定的。对 ArrayList 而言,主要是在内部数组中增加一项,指向所添加的元素;对于 LinkedList 而言,这个开销是统一的,分配一个内部 Entry 对象

  • 在 ArrayList 内部插入或删除一个元素,意味着这个列表中剩余的元素都会被移动;而在 LinkedList 中插入或删除一个元素的开销是固定的

  • LinkedList 不支持元素的高效随机访问

  • ArrayList 的空间浪费主要体现在数组结尾预留的一定容量的空间,而 linkedList 的空间花费则体现在它的每一个元素都需要消耗相当的空间,LinkedList 中有一个私有的内部类

可以这样说:当操作是在一列数据的后面添加数据而不是在前面或中间,并且需要随机地访问其中的元素时,使用 ArrayList 会提供比较好的性能;当你的操作是在一列数据的前面或中间添加或删除数据,并且按照顺序访问其中的元素时,就应该使用 LinkedList 了

-----------本文结束感谢您的阅读-----------
0%