Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 效率方面,在添加到第一个索引时,创建ArrayList或使用数组会更快吗?_Java_Arrays - Fatal编程技术网

Java 效率方面,在添加到第一个索引时,创建ArrayList或使用数组会更快吗?

Java 效率方面,在添加到第一个索引时,创建ArrayList或使用数组会更快吗?,java,arrays,Java,Arrays,我正在使用Java。我想添加到数组的开头。将数组中的所有变量向上移动一个空间,留下一个位置以便在索引0中添加新变量,还是只使用ArrayList更有效 我知道ArrayList会为我移动这些值,但我听说它们效率很低,这是真的吗 是否有其他API可以有效地实现这一点?ArrayList也在内部使用数组来存储数据。但是,Sun/Oracle添加了一个最快的算法,将项目添加到索引0中,并从索引1开始移动项目。因此,最好使用ArrayList进行更简单的编码,但是如果可以调整更好的算法,那么就使用Arr

我正在使用Java。我想添加到数组的开头。将数组中的所有变量向上移动一个空间,留下一个位置以便在索引0中添加新变量,还是只使用ArrayList更有效

我知道ArrayList会为我移动这些值,但我听说它们效率很低,这是真的吗


是否有其他API可以有效地实现这一点?

ArrayList也在内部使用数组来存储数据。但是,Sun/Oracle添加了一个最快的算法,将项目添加到索引0中,并从索引1开始移动项目。因此,最好使用ArrayList进行更简单的编码,但是如果可以调整更好的算法,那么就使用ArrayList。

ArrayList也在内部使用数组来存储数据。但是,Sun/Oracle添加了一个最快的算法,将项目添加到索引0中,并从索引1开始移动项目。因此,最好使用ArrayList进行更简单的编码,但如果可以调整更好的算法,那么就使用Array。

这两种方法都不有效,因为开始时的每次插入都需要移动到目前为止添加的内容。这意味着插入
N
元素需要O(N2)时间,这是相当低效的

LinkedList
s适用于需要在列表开头插入的情况。但是,它们有内存开销,不允许基于索引进行快速查找


如果在插入所有元素之前不需要使用列表,则最好在列表后面插入元素,然后在开始使用之前反转列表。

这两种方法都无效,因为在开始时每次插入都需要移动到目前为止添加的内容。这意味着插入
N
元素需要O(N2)时间,这是相当低效的

LinkedList
s适用于需要在列表开头插入的情况。但是,它们有内存开销,不允许基于索引进行快速查找


如果在插入所有元素之前不需要使用列表,则最好在列表后面插入元素,然后在开始使用之前反转列表。

如果要频繁添加到第一个索引,这将是非常昂贵的,因为它需要将所有索引从1重新定位到数组的末尾,也就是说,它将自身调整大小,以调整顶部的新元素。
LinkedList在这种情况下提供了更好的性能,但它们没有实现随机访问行为。

如果要非常频繁地添加到第一个索引中,这将非常昂贵,因为它需要将所有索引从数组的1重新定位到数组的末尾,也就是说,它将调整其自身大小以调整顶部的新元素。
LinkedList在这种情况下提供了更好的性能,但它们没有实现随机访问行为。

除了方法调用开销和一些较小的维护成本外,ArrayList的效率并不比自己复制数组元素的效率低。ArrayList的某些实现甚至可以更快地移动数据,因为它允许列表从备份数组中的其他位置开始,而不是从索引0开始,正如ArrayQue所做的那样。

除了方法调用开销和一些较小的维护成本外,ArrayList的效率并不比自己复制数组元素低。ArrayList的某些实现甚至可以更快地移动数据,因为它允许列表从备份数组中的其他位置开始,而不是从索引0开始,就像ArrayDesk一样。

ArrayList
为正常使用提供了足够的性能,更重要的是,它们是安全的。因此,您不必担心越界、空指针等问题

例如,为了使其“更快”,您可以去掉
ArrayList
的检查容量等,但这样做会使代码不安全,这意味着您必须确保设置了正确的参数,否则您将获得
indexootfounds

你可以阅读一篇非常有趣的文章,了解更多信息

但百分之九十九的人没有真正的需要。记住并跟着我重复:

过早优化是万恶之源


此外,我真的建议您自己检查JDK源代码。你可以学到很多东西,很明显,可以看看它是如何制作的。

ArrayList
为正常使用提供了足够的性能,更重要的是,它们是安全的。因此,您不必担心越界、空指针等问题

例如,为了使其“更快”,您可以去掉
ArrayList
的检查容量等,但这样做会使代码不安全,这意味着您必须确保设置了正确的参数,否则您将获得
indexootfounds

你可以阅读一篇非常有趣的文章,了解更多信息

但百分之九十九的人没有真正的需要。记住并跟着我重复:

过早优化是万恶之源


此外,我真的建议您自己检查JDK源代码。您可以学到很多东西,很明显,您可以看到它是如何制作的。

您是否只将添加到第一个索引中一次?或者每个列表都有很多次?LinkedList在头部添加元素时效率更高,但代价是不能随机访问列表中的所有元素。@ShivanRaptor这怎么会是一个副本?相关问题涉及大量阅读。他问我如何在列表的开头写一个元素。我会在前面添加很多次,我认为链表听起来是最好的选择!您是否只将添加到第一个索引一次?或者每个列表都有很多次?LinkedList在头部添加元素时效率更高,但代价是不能随机访问列表中的所有元素