Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.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 我应该选择高时间复杂度数据结构还是高空间复杂度数据结构来实现高效方法?_Java_Performance_Data Structures_Time Complexity - Fatal编程技术网

Java 我应该选择高时间复杂度数据结构还是高空间复杂度数据结构来实现高效方法?

Java 我应该选择高时间复杂度数据结构还是高空间复杂度数据结构来实现高效方法?,java,performance,data-structures,time-complexity,Java,Performance,Data Structures,Time Complexity,我必须在两种数据结构中进行选择,ArrayList和LinkedList。 我有两次手术,第一次手术,第二次手术 如果我选择ArrayList- 我会以 for op_one ------ O(n), and at maximum n re-allocations for op_two ------ O(1), and at maximum n re-allocations 如果我选择LinkedList- 我会以 for op_one ------ O(n), and zero re-all

我必须在两种数据结构中进行选择,ArrayList和LinkedList。 我有两次手术,第一次手术,第二次手术

如果我选择ArrayList- 我会以

for op_one ------ O(n), and at maximum n re-allocations
for op_two ------ O(1), and at maximum n re-allocations
如果我选择LinkedList- 我会以

for op_one ------ O(n), and zero re-allocations
for op_two ------ O(n), and zero re-allocations
我将存储数百万个可比较的元素。我将同样有可能做这两项手术。我应该选择哪一个。

(问题首先被理解为不考虑空间的时间复杂性。在评论中要求澄清)

我会使用ArrayList(而不是LinkedList),这不仅是因为时间复杂,而且因为它更简单,并且不会为每个项目构建新节点

注:无论哪种情况,总体复杂度都是O(n):对于ArrayList,O(n)+O(1),或者prob*O(n)+(1-prob)*O(1)的顺序是O(n)


如果给定相同的复杂性(O(n)),那么您应该找出实际的执行时间,或者选择更易于实现或维护的方法。

我建议您将它们放在一起,并以一种现实的方式进行计时,看看哪个更快。如果它们没有明显不同,我会使用你认为最简单的方法

虽然ArrayList和LinkedLIst在空间上的顺序相同,但ArrayList要小得多


除非您知道存在性能问题,否则所有相同的清晰度通常是最重要的。

请考虑在现代体系结构上,内存带宽通常是瓶颈。因此,有时计算结果比存储和读取预先计算的值要快。换句话说,计算复杂性应该与内存复杂性一起考虑。如果计算不昂贵并且可以在缓存中工作,我会保持内存使用量很小


但最后,您必须测试…

我想您的意思是ArrayList不会为每个项构建新节点。是否不可能让操作创建列表?我知道您将重新分配(删除或插入项时在数组中移动项)计算为内存复杂性,但重新分配是时间复杂性。因此,ArrayList的op_2可能是O(n),而不是O(1)。不知何故,我理解了时间复杂度更好/更糟的问题。此外,如果每次重新分配意味着移动N个项目。N重分配意味着O(N^2)时间复杂度。请澄清这一点。