【问题标题】:what is the difference between executing For loop Java执行For循环Java有什么区别
【发布时间】:2014-04-06 17:50:00
【问题描述】:

您能告诉我,代码 A 和 B 中的 For Loop Java 有什么区别吗?而他们两个在执行中给出了相同的结果?而且我知道他们在做什么,但是为什么在代码中以这种方式编写 For 循环 *A* 谢谢

代码

//Code A
public class MyArray {
  public static void main (String[] args){

  int[] a ={1,10,30,40,50};

  for (int i : a)
  {
      System.out.println(i);
  }

 }
}
//====================================
//Code B

public class MyArray{
  public static void main (String[] args){

  int[] a ={1,10,30,40,50};

  for (int i=0;i< a.length; i++)
  {
      System.out.println(a[i]);
  }

 }
}

【问题讨论】:

  • 代码 A:自 JDK >= 5 以来编写一些循环的更短方式
  • 您的示例没有区别。如果您需要更改数组中的值,那么标准的for 循环会更容易使用。
  • 查看这个帖子:stackoverflow.com/questions/85190/…;如您所见,存在一些差异,特别是如果您尝试修改数组 ()
  • 使用 Java 8 流:Integer[] a ={1,10,30,40,50}; Arrays.asList(a).stream().forEach((i) -> System.out.println(i));

标签: java loops for-loop


【解决方案1】:

迭代一个集合比它需要的更丑陋。考虑以下方法,该方法采用一组计时器任务并取消它们:

void cancelAll(Collection<TimerTask> c) {
    for (Iterator<TimerTask> i = c.iterator(); i.hasNext(); )
        i.next().cancel();
}

迭代器很混乱。此外,这是犯错的机会。迭代器变量在每个循环中出现 3 次:这是两次出错的机会。 for-each 结构消除了混乱和出错的机会。下面是使用 for-each 构造的示例:

void cancelAll(Collection<TimerTask> c) {
    for (TimerTask t : c)
        t.cancel();
}

for each 只是一种更好的迭代方式。

限制: 在 for-each 循环中,您将无法知道您正在处理的元素数量(集合中元素的索引),您需要为其定义计数器,而在简单的 for 循环中 i 告诉您数量您正在处理的元素。

【讨论】:

  • 感谢您的回答。请您告诉我,在所有编写用于执行某种功能的应用程序中都必须使用数组吗?
  • 没有得到你的问题!
  • 对不起,我想说,我什么时候可以使用数组?用java编写的数组需要什么样的应用程序?
  • 这取决于您的代码要求,基本上当您想要固定大小的集合时,您可以使用Array,而当必须使用可变大小的集合时ArrayList,同样您可以检查其他数据结构,什么时候用什么?访问sergiy.ca/guide-to-selecting-appropriate-map-collection-in-java
【解决方案2】:

代码 A 只是代码 B 的语法糖,适用于 Java 版本 5 或更高版本。 优点是您不必自己处理平凡的索引代码。 代码 A 也称为 foreach 循环

如果您有一个 Collection 而不是 int[],Plus Code A 也可以工作,从而为您提供一种迭代数组和集合的统一方式(或者更准确地说,是 Iterable 的任何子类)

【讨论】:

  • 非常感谢有用的答案,所以另一个认为我真的想知道在代码中对执行时间的运行有什么影响吗?
  • @Basil 据我所知,没有任何影响,因为编译器将 foreach 语句转换为与我为 for 循环所做的几乎相同的字节码
【解决方案3】:

实际上没有区别,但代码 A 更容易阅读,更难出错。

【讨论】:

【解决方案4】:

for 循环的较短版本意味着数组中的每个索引,这很简单更容易理解。 另一个 for 循环是最常用的,它从分配的起始值开始,一直持续到数组的末尾。 根据我的情况,选择取决于情况。有时使用 codeA 格式可能会让调试应用程序的人更好地理解。

【讨论】:

    【解决方案5】:

    这里的答案并没有指出某个重要的区别:在代码 A 中,您不能简单地更改数组的元素,因为 i 只是一个参考,而在代码 B 中,您可以做 a[i] = //something .

    如果您的数组是一些 Objects 的数组,而您只是想使用 Mutability,那么没有区别。

    【讨论】:

      【解决方案6】:

      实际上,如果在 for(:) 数组的右侧而不是 Iterable 对象(如本例中)的右侧,两个代码与第一个代码相同,内部代码使用 int 索引计数器并检查数组。长度。相当于:

      for (int i=0;i< a.length; i++)
      {
         System.out.println(a[i]);
      }
      

      第一个代码的优点是它在内部处理结束条件,并且写起来很短,然后是第二个。

      但如果对象是可迭代的,那么它会转换为:

      for(Iterator<String> i = iteratableObject.iterator(); i.hasNext(); ) {
          String item = i.next();
          System.out.println(item);
      }
      

      【讨论】:

      • 感谢您的回答。请您告诉我,在所有编写用于执行某种功能的应用程序中都必须使用数组吗?
      • 对不起,我想说,我什么时候可以使用数组?用java编写的数组需要什么样的应用程序?
      猜你喜欢
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 2014-07-07
      • 2011-04-01
      • 1970-01-01
      • 2019-10-01
      • 1970-01-01
      • 2011-07-19
      相关资源
      最近更新 更多