次のコードがあるとします。
List<String> modifiableList = new ArrayList<String>(Arrays.asList("1","2","3"));
List<String> unmodifiableList = Collections.unmodifiableList(modifiableList);
System.out.println(unmodifiableList);
modifiableList.remove("1");
modifiableList.remove("3");
System.out.println(unmodifiableList);
それは印刷します
[1, 2, 3]
[2]
2 行目を次のように変更する場合
List<String> unmodifiableList = Collections.unmodifiableList(
new ArrayList<String>(modifiableList));
期待どおりに動作します。問題は、UnmodifiableList
コレクションの内部クラス (および他のすべての変更不可能なクラス) が元のリストの新しいコピーを作成しないのはなぜArrayList
ですか?
編集:コードの機能を理解しています。私の質問は、なぜこのように実装されたのですか? 基になる配列の新しいコピーを作成する際に、UnmodifiableList (コレクションの内部クラス) のコンストラクターが ArrayList のコンストラクターのように動作するのはなぜですか? 変更可能なコレクション (ArrayList) はコンテンツ全体をコピーするのに、変更不可能なコレクションはコピーしないのはなぜですか?