【问题标题】:How to iterate over an array returned by a function in Java如何遍历Java中函数返回的数组
【发布时间】:2012-04-06 10:43:55
【问题描述】:

迭代函数返回的数组的最佳方法是什么?

例子:

for (String s : collectMyStrings()){
  System.out.println(s);
}

是在每次迭代中调用 collectMyStrings(),还是 Java 只调用一次,并将返回的数组用于 for 循环的所有迭代?

【问题讨论】:

  • 您可以通过尝试回答自己的问题!
  • 是的,但我喜欢把它记录下来,如果其他人像我一样尝试谷歌
  • 如果您真的担心,您可以随时将其保存为变量,然后循环遍历该变量。但我认为它只会调用一次。

标签: java arrays function for-loop iteration


【解决方案1】:

collectMyStrings() 方法只被调用一次以获取数组/集合进行迭代。

【讨论】:

    【解决方案2】:

    对于数组,Java 编译器将 for-each 循环转换为带有索引变量的普通 for 循环。这意味着你的代码 sn-p 大致相当于这个:

    String[] strings = collectMyStrings();
    int length = strings.length;
    
    for (int i = 0; i < length; i++) {
        String s = strings[i];
        System.out.println(s);
    }
    

    因此,如您所见,该方法仅被调用一次。就连数组的length属性也只能读取一次。

    【讨论】:

      【解决方案3】:

      它只会被调用一次,并且会为返回的数组创建一个迭代器(隐式地)。

      【讨论】:

      • 对于数组,编译器将 for-each 循环转换为带有索引变量的普通 for 循环。只有Iterable 对象上的 for-each 循环才会转换为基于迭代器的循环。
      • 只是为此添加更多上下文。我相信您不能/不应该修改正在迭代的内容。所以编译器缓存返回的可迭代对象是有意义的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 2016-09-25
      • 2017-01-30
      • 2022-01-17
      相关资源
      最近更新 更多