【问题标题】:Why do these two list Iterators behave differently?为什么这两个列表迭代器的行为不同?
【发布时间】:2013-09-04 13:34:20
【问题描述】:

我正在练习列表迭代,然后我被卡住了。我的问题是,为什么这两种方法会给出不同的结果。

第一个代码打印出一个无限循环。而第二个,打印出索引中的下一个字符串。

我是java新手,这也是我的第一语言。

public static void main(String[] args) {


    String[] hi = {"yo", "wat", "sup"};
    List<String> l1 = new ArrayList(Arrays.asList(hi));

    while (l1.iterator().hasNext()) {


        System.out.println(l1.iterator().next());
        ;
    }
   }

VS

public static void main(String[] args) {


    String[] hi = {"yo", "wat", "sup"};
    List<String> l1 = new ArrayList(Arrays.asList(hi));

    Iterator<String> rator = l1.iterator();

    while (rator.hasNext()) {
      System.out.println(rator.next());
    }
}

【问题讨论】:

    标签: java list iteration


    【解决方案1】:

    l1.iterator( always 生成一个 new 迭代器。在第一段代码中,您将创建一个新的迭代器,将其丢弃、重新创建并再次丢弃。由于迭代器没有机会到达终点,因此您永远不会退出循环。

    【讨论】:

    • 所以基本上每次while方法执行时.iterator都是一个新的迭代器?
    【解决方案2】:

    在第一种情况下,每次检查循环中的条件时,您都会创建一个新的Iterator(它一次又一次地从第一个元素开始)。然后您在println 中创建更多它们(每个循环创建2 个迭代器)。程序无休止地显示第一个元素 ("yo")。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-26
      • 2013-07-20
      • 2012-09-21
      • 1970-01-01
      • 2012-08-26
      相关资源
      最近更新 更多