LinkedList 的作者说他自己都不用 LinkedList?
时间:2021-11-15 14:30:59
手机看文章![](https://img.21ic.com/qrcode/qrcode.php?url=https://www.21ic.com/article/912003.html)
扫描二维码
随时随地手机看文章
[导读]今天在网上冲浪,看到有文章说LinkedList的作者说他自己都不用LinkedList,我就特意去翻了翻他的推特,发现他确实说过这话!可能这就是大佬吧,我造轮子,但是我不用!或者这就是传说中的厨子不吃自己做的菜?不扯了,言归正传。其实我个人觉得大佬说好像是事实,因为在业务上好像...
今天在网上冲浪,看到有文章说 LinkedList 的作者说他自己都不用 LinkedList,我就特意去翻了翻他的推特,发现他确实说过这话!
![](https://img.21ic.com/weixin/tr/2021-11/15/453xnhrl723.png)
- 数组的随机访问快,插入和删除慢
- 链表的插入删除快,随机访问慢
- 频繁增删的情况下,用链表比较合适
- 在随机查找多的情况下,用数组比较合适
public class YesArrayLinkedBattle {
private static final int COUNT = 100000;
static List fillList(List list) {
for (int i = 0; i < COUNT; i ) {
list.add(i); //将list填满,假装我们在数据库里得到这么多数据
}
return list;
}
static void randomAdd(List list, String listType) {
long t1 = System.currentTimeMillis();
for (int i = 0; i < COUNT; i ) {
list.add(ThreadLocalRandom.current().nextInt(0,COUNT), i);
}
long t2 = System.currentTimeMillis();
System.out.println(listType "随机位置插入" COUNT "次耗时:" (t2-t1));
}
public static void main(String[] args) {
randomAdd(fillList(new ArrayList<>(COUNT)), "数组");
randomAdd(fillList(new LinkedList<>()), "链表");
}
}
这个实验很粗暴简单,但也很直观,分别对被填满数据的 ArrayList 和 LinkedList 执行 10 万次随机的插入操作,然后分别统计耗时。执行结果如下:![](https://img.21ic.com/weixin/tr/2021-11/15/367ilurh413.png)
频繁增删的情况下,用链表比较合适
当然,如果数据量很小的话,其实两者都是差不多的,比如长度都为 100 ,执行 100 次,则耗时如下:![](https://img.21ic.com/weixin/tr/2021-11/15/198cvrqx473.png)
![](https://img.21ic.com/weixin/tr/2021-11/15/164kcqfm195.png)