2

私は以下のコードを持っています:

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class IteratorExample {

    public static void main(String[] args) {

        List<String> listnames = new ArrayList<String>();
        listnames.add("Tom");
        listnames.add("Finn");
        listnames.add("Harry");

        ListIterator<String> iteratorNames = listnames.listIterator();
        while (iteratorNames.hasNext()) {
            System.out.println(iteratorNames);
        }

    }

}

実行すると、以下のような奇妙な出力が得られます(プログラムを実行するたびに異なります):

java.util.ArrayList$ListItr@a200d0c
java.util.ArrayList$ListItr@a200d0c
java.util.ArrayList$ListItr@a200d0c
java.util.ArrayList$ListItr@a200d0c
java.util.ArrayList$ListItr@a200d0c

また、プログラムは無限に実行されています。

リスト値を出力しないのはなぜですか?

4

6 に答える 6

4

イテレータ自体を見ています。

使用する

iteratorNames.next()

次のアイテムを取得します。

于 2013-10-26T14:59:19.827 に答える
3

以下の行を変更します。

System.out.println(iteratorNames);

に:

System.out.println(iteratorNames.next());
于 2013-10-26T14:58:39.873 に答える
2

Iterator他の人は、 -- をクエリして次の値があるかどうかを確認し、次の値がある場合はそれを取得する方法について既に言及しnext()ています。

ただし、優れた構文抽象化により、これらの低レベルの詳細を完全に回避するオプションがあります。

for (String name : listnames) {
  System.out.println(name);
}

試してみます。私の意見では、これは Java 5 の最も役立つ機能の 1 つです。詳細については、こちらを参照してください。

于 2013-10-26T15:08:46.410 に答える
1

プログラムSystem.out.println(iteratorNames); では、オブジェクトの文字列表現を返す Object クラスの toString() を呼び出します (toString() の実装を参照)。

public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

そのため、 のような出力が得られますjava.util.ArrayList$ListItr@a200d0c

next()を呼び出します リスト内の次の要素を返します。次のように:

System.out.println(iteratorNames.next());
于 2013-10-26T15:11:11.797 に答える
0

使用する、

System.out.println((String)iteratorNames.next());
于 2013-10-26T15:08:07.877 に答える