5

私はリストの反復を練習していますが、行き詰まりました。私の質問は、なぜこれら 2 つの方法で異なる結果が得られるのかということです。

最初のコードは、無限ループを出力します。2 番目は、インデックス内の次の文字列を出力します。

私は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());
    }
}
4

2 に答える 2

6

l1.iterator( 常に新しい反復子を生成します。コードの最初の部分では、新しい反復子を作成し、それを破棄し、再作成して、再び破棄しています。イテレータは最後に到達する機会がないため、ループを終了することはありません。

于 2013-09-01T07:46:42.227 に答える