1

私のプログラムでは、ArrayList の LinkedList を作成しました。

 List<Marker> list1 = new ArrayList<Marker>();
 LinkedList<List<Marker>> list2 = new LinkedList<List<Marker>>();

list1 にアイテムを追加している間、すべてが正常に機能します。list1.add(mark);

しかし、リスト 1 をリスト 2 () に追加しようとすると、list2.add(list1)奇妙なことが起こります: リスト 2 の各リスト サイズは、最後に追加されたリスト サイズ + 1 に等しくなり、これらのリスト項目を読み取ることさえできません (たとえば) list2.getFirst().get(0); -これを行うと、エラーが発生しました。

たとえば、私はこれをやっています:

mark.addSomeInfo();
list1.add(mark);
list2.add(list1);
mark.addSomeInfo();
list1.add(mark);
list2.add(list1);
mark.addSomeInfo();
list1.add(mark);
list2.add(list1);

そして、私はこれを取得する必要があります:

list2.get(0).size() = 1;
list2.get(1).size() = 2;
list2.get(2).size() = 3;

しかし、代わりに私はこれを得ています:

list2.get(0).size() = 4;
list2.get(1).size() = 4;
list2.get(2).size() = 4;

なんで?私が間違っていることは何ですか?

4

6 に答える 6

1

list1はコード内の単なる参照です。したがって、本質的に、同じarraylistオブジェクトを何度も追加していますlinkedlist。そして最後に、arraylistあなたの例では同じものが3回コピーされ、サイズは4です。

于 2013-07-26T09:30:39.630 に答える
1

このLinkedList<List<Marker>> list2 addメソッドは、追加したリストのコピーを作成しません。list1への参照を追加するだけlist2です。したがって、本質的にlist2は、同じリストへの 3 つの参照を保持しています。

あなたがしたいことは、コピーを自分で作成することです。list2

mark.addSomeInfo();
list1.add(mark);
list2.add(new ArrayList<Mark>(list1));
mark.addSomeInfo();
list1.add(mark);
list2.add(new ArrayList<Mark>(list1));
mark.addSomeInfo();
list1.add(mark);
list2.add(new ArrayList<Mark>(list1));
于 2013-07-26T09:22:19.820 に答える
1

のすべての参照はLinkedList同じListオブジェクトを参照しているlist1ため、サイズ 4 が出力されます。

使用ArrayListしたように、重複要素をサポートしているため、マークオブジェクトを追加するたびに重複エントリが作成されます。

于 2013-07-26T09:23:01.573 に答える