gpt4 book ai didi

java - 如果我在循环外评估数组的大小,运行时效率会有差异吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:55:18 25 4
gpt4 key购买 nike

迭代元素(在本例中为整数)数组的传统方法如下:

int[] array = {5, 10, 15};

for(int i = 0; i < array.length; i++) [
//do something with array[i]
}

但是,这是否意味着在每次迭代后都会重新评估“array.length”?这样做不是更有效率吗? :

int[] array = {5, 10, 15};

int noOfElements = array.length;

for(int i = 0; i < noOfElements; i++) {
//do something with array[i]
}

这样,(据我了解)程序只需计算一次,然后查找“noOfElements”变量的值。

注意:我知道增强的 for 循环,但是当您想使用正在递增的变量(本例中的“i”)来实现其他目的时,不能使用它在 for 循环中。

我怀疑这实际上是一个问题,即 Java 编译器是否有能力实现“array.length”不会改变并在计算一次后实际重用该值。

所以我的问题是:我编写的第一段代码和第二段代码的运行效率是否存在差异?

我从下面的回复中收集到的是,当一个数组被实例化时(这个词正确吗?)一个名为 length 的实例变量被创建,它等于数组中元素的数量。

这意味着语句array.length与计算无关;它仅引用实例变量。

感谢您的输入!

最佳答案

参见 JLS- 10.7. Array Members :

The members of an array type are all of the following:

  • The public final field length, which contains the number of components of the array. length may be positive or zero.

调用 array.length 的时间复杂度为 O(1)(恒定时间操作 - 它是数组的final 成员)。

另请注意,如评论中所述,“传统”方式不一定是您建议的方式。您可以使用 for-each loop :

for(int i : array) {
...
}

关于java - 如果我在循环外评估数组的大小,运行时效率会有差异吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27510357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com