当前位置:网站首页>The author of LinkedList said he didn't use LinkedList himself
The author of LinkedList said he didn't use LinkedList himself
2022-07-07 22:52:00 【Yes' level training strategy】
Hello everyone , I am a yes.
Surfing the Internet today , See an article saying LinkedList The author said he didn't have to LinkedList, I went to his twitter on purpose , Found that he did say that !

Maybe this is the big guy , I make wheels , But I don't ! Or this is the legendary cook who doesn't eat his own dishes ?
No more , Get down to business . In fact, I personally feel that what the boss said seems to be true , Because it doesn't seem to be used in business LinkedList , Most of the scenes use ArrayList More appropriate , I counted my daily usage , It's really all ArrayList .
Speaking of this , Someone may disagree , Said I had seen the face-to-face test questions ,LinkedList But it has its advantages !
I've also read this question , If I remember correctly, it should be : say something ArrayList and LinkedList Differences between ?
I think this question can be called “ The top three of the eight part essay ”, In fact, this problem is mapped to the comparison between arrays and linked lists .
As long as you read this interview question online , The answer you see must be :
- Random access to arrays is fast , Insertion and deletion are slow
- The insertion and deletion of linked list is fast , Random access is slow
- Frequent additions and deletions , It is more appropriate to use a linked list
- When there are many random searches , An array is more appropriate
The problem lies in the frequent addition and deletion of the linked list . If only from the perspective of increasing the time complexity of these three methods , Such is the case , No mistake. .
however , In normal use , This statement is completely untenable ! Do you think , If you want to delete an element from the linked list , You have to find it first ! The search of this linked list can be time-consuming !
So in practice , If you have frequent additions and deletions , Nor should we use linked lists .
Don't believe it ? Let's do an experiment to see .
public class YesArrayLinkedBattle {
private static final int COUNT = 100000;
static List<Integer> fillList(List<Integer> list) {
for (int i = 0; i < COUNT; i++) {
list.add(i); // take list fill , Pretend we get so much data in the database
}
return list;
}
static void randomAdd(List<Integer> 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 +" Random position insertion " + COUNT + " Time consuming :" + (t2-t1));
}
public static void main(String[] args) {
randomAdd(fillList(new ArrayList<>(COUNT)), " Array ");
randomAdd(fillList(new LinkedList<>()), " Linked list ");
}
}
The experiment is rough and simple , But it's also intuitive , Separate the filled data ArrayList and LinkedList perform 10 Ten thousand random insertion operations , Then count the time consumption separately .
The results are as follows :

Is that so? , In the case of random insertion , The linked list is not dominant, but much weaker than the array !
So for the insertion of linked list , You can't just focus on the time complexity of its insertion , Also include the cost of finding the front node , therefore You can't Say arbitrarily : Frequent additions and deletions , It is more appropriate to use a linked list
Of course , If the amount of data is small , In fact, both are similar , For example, the length is 100 , perform 100 Time , The time consumption is as follows :

The length is 1000 , perform 1000 Time , The time consumption is as follows :
therefore , In the case of a small amount of data and a small number of operations, there is no need to worry too much about which one to use . However, when the amount of data is large and sensitive to time delay , It is suggested to do a good job in testing , Can not be based on some plain “ Online conclusion ” And come to a conclusion .
Okay , For the time being . Remember, don't go to the interview directly , We need to question more , Add some personal thinking , This will make people think you have something more .
I am a yes, From a little bit to a billion , See you next time .
边栏推荐
- [problem] pytorch installation
- Redis集群安装
- Revit secondary development - link file collision detection
- 不夸张地说,这是我见过最通俗易懂的,pytest入门基础教程
- Apple further entered the financial sector through the 'virtual card' security function in IOS 16
- Debezium系列之:引入对 LATERAL 运算符的支持
- 微服务远程Debug,Nocalhost + Rainbond微服务开发第二弹
- How to judge whether the input content is "number"
- Debezium系列之:mysql墓碑事件
- Aspose. Words merge cells
猜你喜欢

. Net automapper use
![[problem] pytorch installation](/img/9f/1419c471838e3af8ea2158266254a5.jpg)
[problem] pytorch installation

如何选择合适的自动化测试工具?

行测-图形推理-2-黑白格类

Blender exchange group, welcome to the water group ~

Line test - graphic reasoning - 3 - symmetric graphic class

How pyGame rotates pictures

Two methods of calling WCF service by C #

Line test graph reasoning graph group class

Yarn cannot view the historical task log of yarn after enabling ACL user authentication. Solution
随机推荐
Line test graph reasoning graph group class
php 记录完整对接腾讯云直播以及im直播群聊 所遇到的坑
Redis official ORM framework is more elegant than redistemplate
Debezium系列之:引入对 LATERAL 运算符的支持
Redis cluster installation
UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0xf9 in position 56: illegal multibyte sequence
Get the week start time and week end time of the current date
Remember aximp once Use of exe tool
Line test - graphic reasoning - 3 - symmetric graphic class
XMIND mind mapping software sharing
筑起云端 “免疫”屏障,让你的数据有备无患
Revit secondary development - operation family documents
Debezium系列之:支持 mysql8 的 set role 語句
Write in front -- Talking about program development
Redis集群安装
Build an "immune" barrier in the cloud to prepare your data
Yarn开启ACL用户认证之后无法查看Yarn历史任务日志解决办法
微服务架构开源框架详情介绍
Revit secondary development - Hide occlusion elements
关于海康ipc的几个参数