Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LinkedList<;E>;vs ArrayList<;E>;成本_Java_Data Structures_Complexity Theory_Big O - Fatal编程技术网

Java LinkedList<;E>;vs ArrayList<;E>;成本

Java LinkedList<;E>;vs ArrayList<;E>;成本,java,data-structures,complexity-theory,big-o,Java,Data Structures,Complexity Theory,Big O,我在这里读了很多关于在Java中使用ArrayList和LinkedList的成本的问题。到目前为止,我看到的最有用的一个是这里: 我想确定我的理解是正确的 在我当前的用例中,我有多种情况,其中对象存储在列表结构中。每次运行时,列表中对象的数量都会发生变化,因此不需要随机访问列表中的对象。基于此信息,我选择使用LinkedList和ListIterator遍历列表的整个内容 例如,我的代码可能如下所示: for (Object thisObject : theLinkedList) {

我在这里读了很多关于在Java中使用ArrayList和LinkedList的成本的问题。到目前为止,我看到的最有用的一个是这里:

我想确定我的理解是正确的

在我当前的用例中,我有多种情况,其中对象存储在列表结构中。每次运行时,列表中对象的数量都会发生变化,因此不需要随机访问列表中的对象。基于此信息,我选择使用LinkedList和ListIterator遍历列表的整个内容

例如,我的代码可能如下所示:

for (Object thisObject : theLinkedList) {
    // do something
}
如果这是一个错误的选择,请帮助我理解为什么

我目前的理解是,使用迭代解决方案遍历LinkedList中的整个对象列表将产生O(n)开销。由于不存在对列表的随机访问(例如,需要获取第#3项),因此我目前的理解是,这基本上与在ArrayList的内容上循环并使用索引请求每个元素相同

假设我事先知道要存储在列表中的对象的数量,我当前的思路是,最好将ArrayList初始化为适当的大小,然后完全切换到该结构,而不使用ListIterator。这个逻辑合理吗


一如既往,我非常感谢大家的投入

LinkedList
ArrayList
的迭代应该花费大致相同的时间来完成,因为在每种情况下,从一个元素到下一个元素的步进成本都是恒定的。不过,由于引用的局部性,
ArrayList
可能会更好一些,因此可能值得分析一下发生了什么

如果保证始终有固定数量的元素,并且在随机位置不会有插入和删除,那么原始数组可能是一个不错的选择,因为它非常快速,并且针对这种情况进行了很好的优化

也就是说,您对为什么要使用
LinkedList
的分析似乎是正确的。同样,对程序进行概要分析并查看
ArrayList
对于您的用例来说是否真的更快也没有什么坏处

希望这有帮助