Java ArrayList与LinkedList的性能因机器而异?
实际上,我已经尝试了Arraylist vs LinkList的相关形式的一个例子。但我的问题是,在我阅读stackoverflow的一个问题之前,不同机器的形式是不同的 第二。机器输出:Java ArrayList与LinkedList的性能因机器而异?,java,performance,data-structures,collections,arraylist,Java,Performance,Data Structures,Collections,Arraylist,实际上,我已经尝试了Arraylist vs LinkList的相关形式的一个例子。但我的问题是,在我阅读stackoverflow的一个问题之前,不同机器的形式是不同的 第二。机器输出: ArrayList add: 13265642 LinkedList add: 9550057. ArrayList get: 1543352 LinkedList get: 85085551 ArrayList remove: 199961301 LinkedList remove: 85768810
ArrayList add: 13265642
LinkedList add: 9550057.
ArrayList get: 1543352
LinkedList get: 85085551
ArrayList remove: 199961301
LinkedList remove: 85768810
谁能告诉我:
我有一些问题
1.为什么不同机器的性能不同
2.为什么arraylist的添加和删除速度比linklist慢
3.为什么Arraylist变得更快
4.在哪种情况下应首选链接列表
它帮助我自己编写了一个linkedlist和一个arraylist,以便更好地理解它们。为什么不同机器的性能不同 这可能是由许多因素造成的。对于本例,RAM的速度可能是最大的影响因素,但是CPU速度、系统负载等都会影响性能。这种类型的差异是可以预料的 2.为什么arraylist的添加和删除速度比linklist慢 在如此大的数据集上,数组列表将间歇性地耗尽其内部保存数据的数组中的空间。当发生这种情况时,阵列将需要调整大小,这意味着创建一个新的更大的阵列并复制所有数据(这不是一项简单的任务)。删除可能需要移动阵列中的以下元素。这是相似的 3.为什么Arraylist变得更快 Arraylist get可以在O(1)时间(常数时间)内完成,因为它只是数组内部的偏移内存查找。但是,链表必须遍历该列表才能找到该元素。这需要O(n)时间(线性时间) 4.在哪种情况下应首选链接列表
如果插入/删除操作比查找操作多,则链表的性能可能比arraylist更好。相反,如果要执行更多的查找操作,arraylist可能会提供更好的性能。1.为什么不同机器的性能不同 这可能是由许多因素造成的。对于本例,RAM的速度可能是最大的影响因素,但是CPU速度、系统负载等都会影响性能。这种类型的差异是可以预料的 2.为什么arraylist的添加和删除速度比linklist慢 在如此大的数据集上,数组列表将间歇性地耗尽其内部保存数据的数组中的空间。当发生这种情况时,阵列将需要调整大小,这意味着创建一个新的更大的阵列并复制所有数据(这不是一项简单的任务)。删除可能需要移动阵列中的以下元素。这是相似的 3.为什么Arraylist变得更快 Arraylist get可以在O(1)时间(常数时间)内完成,因为它只是数组内部的偏移内存查找。但是,链表必须遍历该列表才能找到该元素。这需要O(n)时间(线性时间) 4.在哪种情况下应首选链接列表
如果插入/删除操作比查找操作多,则链表的性能可能比arraylist更好。相反,如果要执行更多的查找操作,arraylist可能会提供更好的性能。可能不同的机器具有不同的处理能力,因此以不同的速度完成任务。很多事情都会影响这一点1)哪个JVM?2) 你是如何记录这些时间的(热身时间)3)当你记录这些时间的时候,还有什么在争夺资源等等……为什么Arraylist变得更快?因为它实现了它看起来是成比例的,所以看起来你的第二台计算机总体上比第一台计算机快。可能不同的计算机有不同的处理能力,因此以不同的速度完成任务。很多事情都会影响这一点1)哪个JVM?2) 你是如何记录这些时间的(热身时间)3)当你记录这些时间的时候,还有什么在争夺资源等等……为什么Arraylist变得更快?因为它实现了它看起来是成比例的,所以看起来你的第二台计算机总体上比第一台计算机快。关于#2:ArrayList的大小会自动增长,但不会自动收缩。因此,“太大”的提法是不正确的。应该使用
trimToSize()
方法将ArrayList实例的容量修剪为列表的当前大小。关于#2:ArrayList的大小会自动增加,但不会自动缩小。因此,“太大”的提法是不正确的。应该使用trimToSize()
方法将ArrayList实例的容量修剪为列表的当前大小。
ArrayList add: 24675693
LinkedList add: 15693734
ArrayList get: 3464166
LinkedList get: 131314610
ArrayList remove: 344500934
LinkedList remove: 127862009
ArrayList add: 13265642
LinkedList add: 9550057.
ArrayList get: 1543352
LinkedList get: 85085551
ArrayList remove: 199961301
LinkedList remove: 85768810