-6

次のコードがあります。

    ArrayList<String> words;
    words = new ArrayList<String>();
    words.add("is");
    words.add("us");
    ListIterator<String> it;
    it = words.listIterator();
    it.add("##");
    System.out.println(words);
    it.next();
    it.next();
    it.previous();
    it.set("##");
    System.out.println(words);

出力は になると## us ##思いますが、プログラムを実行すると が返されます## is ##。これは、アイテムをそれ自体に追加するのではなく、にListIteratorアイテムを追加することに関係していると思います。ArrayListArrayList

プログラムがこのように動作するのはなぜですか?

4

1 に答える 1

8

あなたの質問は明確ではありませんが、あなたが見逃しているかもしれない主なポイントはListIterator.add、現在の場所に挿入することだと思います:

要素は、next() によって返される次の要素がある場合は直前に挿入され、previous() によって返される次の要素がある場合はその直後に挿入されます。

また:

新しい要素は暗黙のカーソルの前に挿入されます: next への後続の呼び出しは影響を受けません

it.add("##")したがって、リストへの最初の呼び出しの後に、"##"が含まれています"is" "us"。次に、次に 2 回移動します。最初の移動では、カーソルが直後に移動します"is"(これが返されます)。2 番目は、カーソルを直後に移動します"us"(これが返されます)。その後、 への呼び出しが再びprevious()返され、最後に への呼び出しが次のように置き換えられます。"us"set()"us""##"

next() または previous() によって返された最後の要素を、指定された要素に置き換えます (オプションの操作)。

ドキュメントに完全に従っているように見えます。残念ながら、これらの手順のどれがあなたを混乱させているのかは明確ではありません.1つの質問で非常に多くのことを混同しているため.

于 2012-12-19T16:29:09.660 に答える