2

ペアのセットのリストがあります。equalを使用すると、すべてのセットがコピーされますか?

List<HashSet<Pair>> list1 = new ArrayList<HashSet<Pair>>();
List<HashSet<Pair>> list2 = new ArrayList<HashSet<Pair>>();

list1.add(0, new HashSet<Pair>());
list1.add(1, new HashSet<Pair>());
list1.add(2, new HashSet<Pair>());
list1.add(3, new HashSet<Pair>());

私がそうする場合list2 = list1、それは完全にコピーされますか?使うとクラッシュするから。

Iterator<Pair> it1 = list2.get(0).iterator();
Iterator<Pair> it2 = list2.get(1).iterator();
Iterator<Pair> it3 = list2.get(2).iterator();
Iterator<Pair> it4 = list2.get(3).iterator();
4

2 に答える 2

4

いいえ。割り当ては何もコピーせず、代わりにlist1を指すようにlist2参照を更新します。したがって、list2をlist1のように使用できます。ただし、2に加えた変更は1に反映されます。

于 2012-07-22T18:00:18.693 に答える
4
list2 = list1

この割り当ては、参照list2をと同じリストのポイントに割り当てるだけlist1です。(2つの参照を持つリストは1つしかないことに注意してください。)リストをコピーする場合は、コピーコンストラクターを使用する必要があります。

list2 = new ArrayList<HashSet<Pair>>(list1);
于 2012-07-22T18:03:28.073 に答える