ArrayList与LinkedList的谬论

本文通过一个具体的Java示例程序对比了数组和链表在数据插入操作上的性能差异,结果显示数组列表在某些情况下比链表更快。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对数据进行修改的时候使用链表可以直接在指定的位置实现删除、插入操作,不需要像数组那样还要移动数组中的数据,而实现数据直接访问的时候使用数组的就可以直接的找到目的地址,不像链表一样需要从头到尾的寻找。

所以很多人认为在数据的插入、删除的时候链表的效率要比数组的高,因为他不需要数组的频繁的移动数据,但是这几天看到一篇文章说是其实数组的效率还是比较高的,因为他在数据移动的时候是在内存中并且相邻,数据移动就会非常的快。而链表需要从前到后找到数据然后在进行插入、删除操作。而链表在数据的遍历的时候是很费时间的。

有一个很形象的比喻就是:

插入、删除数据 数组就像是搬运工一样将东西搬到另外一个地方,而链表就像是有很多的抽屉,每一个抽屉都有下一个抽屉的钥匙,所以每一次都需要打开抽屉取出钥匙,然后再打开下一个抽屉,就这样一直下去。

但是很多人都认为搬用东西的数组肯定没有开抽屉的链表快,因为人们都无形中觉得数组搬运的东西又重距离也远,所以这就是人们觉得数组的效率很差,而链表的就很快了。但是实际并不是这样的,数组移动的距离很短而且东西也很轻,所以数组的访问还是很快的。

下面的一个例子来说明这些吧。。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Random;


public class Test {

<wbr><br><wbr>public static void main(String[] args) {<br><wbr><wbr>int a[] = new int[5000];<br><wbr><wbr>for(int i= 1 ; i&lt; 5000;i++)<br><wbr><wbr><wbr>a[i] = i;<br><wbr><wbr>long start[]= new long[2] ;<br><wbr><wbr>long end[] = new long[2];<br><wbr><wbr>LinkedList list = new LinkedList();<br><wbr><wbr>for(int i= 1 ; i&lt; 5000;i++)<br><wbr><wbr><wbr>list.add(a[i]);<br><wbr><wbr>start[0] =<wbr>System.currentTimeMillis();<br><wbr><wbr>Random r = new Random();<br><wbr><wbr>for(int i=0;i&lt;10000;i++)<br><wbr><wbr>{<br><wbr><wbr><wbr>list.add(r.nextInt(5000),i);<br><wbr><wbr>}<br><wbr><wbr>end[0] = System.currentTimeMillis();<br><wbr><wbr>ArrayList list2 = new ArrayList();<br><wbr><wbr>for(int i= 1 ; i&lt; 5000;i++)<br><wbr><wbr><wbr>list2.add(a[i]) ;<br><wbr><wbr>start[1] = System.currentTimeMillis();<br><wbr><wbr>for(int i=0;i&lt;10000;i++)<br><wbr><wbr>{<br><wbr><wbr><wbr>list2.add(r.nextInt(5000),i);<br><wbr><wbr>}<br><wbr><wbr>end[1] = System.currentTimeMillis();<br><wbr><wbr>System.out.println("\n比较结果为:");<br><wbr><wbr>System.out.println("LinkList 用的时间为:" + (end[0]- start[0]));<br><wbr><wbr>System.out.println("ArrayList 用的时间为:" + (end[1]- start[1]));<br><wbr>}<br><wbr><br> }<br> 输出的结果为:</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

ArrayList与LinkedList的谬论

ArrayList与LinkedList的谬论

ArrayList与LinkedList的谬论

经过多次的测试,结果都是为ArrayList插入数据要比LinkedList要快一些,当着这里可能也有别的误差在里面。所以我们要靠自己程序进行测试才能得到相应的结论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值