为什么这两个列表迭代器的行为有所不同?

时间:2013-09-01 07:45:11

标签: java list iteration

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

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

我是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());
    }
}

2 个答案:

答案 0 :(得分:6)

l1.iterator( 始终生成 new 迭代器。在第一段代码中,您将创建一个新的迭代器,丢弃它,重新创建它,然后再次丢弃它。由于迭代器没有机会到达终点,所以你永远不会退出循环。

答案 1 :(得分:0)

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

相关问题