多语言展示
当前在线:1624今日阅读:60今日分享:41

java中ArrayList和LinkedList的比较简述

作为List的两个实现类ArrayList和LinkedList的方法在逻辑上是基本相同的,但是他们在实际使用中由于其不同的底层数据结构,造成性能上具有差异性,以下简单阐述这种差异性及造成的原因。
工具/原料
1

java

2

jdk1.8

方法/步骤
1

ArrayList优势:元素随机访问速度快我们知道ArrayList的底层数据结构是数组,这也就使得ArrayList特性上有了数组的的特征,对于数组来说,我们可以通过元素下标很轻松的一次性定位到元素,因此,这就使得ArrayList在元素的访问上具有大的优势。

2

ArrayList劣势:插入、删除元素速度慢由于其底层是数组,数组存入内存中是连续的存储空间,因此在进行插入和删除操作的时候,在插入位置,添加插入元素后,后面的位置下标需要向后面移动,删除操作时,删除元素位置后的下标都需要向前移动,这样执行的复杂程度随元素增多而增多,运行速度自然相对较慢如下在下标1插入一个元素:

3

LinkedList的优势:插入、删除操作速度快Linkedlist的底层数据结构是双向链表,由于链表以结点作为存储单元,这些存储单元可以是不连续的。每个结点由两部分组成:存储的数值+前序结点和后序结点的指针,在数据删除的时候,只需要将这个元素的前后指针删除,前一个元素的指针直接指向后一个数据就行,更改的只是指针地址,并不影响其他,因此,LinkedList在数据插入和删除时具有绝对优势。

4

LinkedList的劣势:随机访问速度慢同样,也是由于指针是需要一步一步向后移动的,直到找到需操作的节点,因此,在随机访问时,只能进行遍历,随着元素增多,遍历数据量越来越大,因此随机访问速度慢;如下图,如果要找3节点的data,必须从1节点next指针,然后找到2的next指针,再到节点3的next,才能取到节点3的data

5

利用程序示例测试ArrayList和LinkedList的访问速度:编程简单进行测试,调用get、add、remove方法,数据量为10000条,统计的数据是10000次调用方法的总耗时,单次无法比较差异;

6

运行结果如下:

7

减少数据量和统计1000次,此时只有几毫秒的差距,可以忽略不计,因此在数量较小,调用次数比较少时,两个线性表几乎没有差距,当达到10k量级以上才会有较大差距。以下是1000次的输出;

注意事项
1

测试的都是多次调用综合起来的数据才能看出差距

2

在特定环境下,运算速度还与硬件如cpu运算有关,因此需要综合起来评估

推荐信息