私が理解している不変コレクションの欠陥が正しいかどうかわからないので、この回答にそれらをリストします。誰かがここで私を訂正してくれることを願っています。
a):Collections.unmodizableXXX()と比較すると、ImmutableXXX.copyOf()はソースコレクション機能を失います。たとえば、linkedListがImmutableList.copyOf()に入れられると、ImmutableListはリンクされなくなります。ツリーベースのコレクションと同じです。
b):人々は、Collections.unmodizableXXXがソースコレクションの同じ参照を使用していると考えているため、ソースコレクションが変更されると、Collections.unmodizableXXXも変更されます。しかし、私の解決策は、ソースコレクションをImmutableXXX.copyOf()に渡される一時コレクションにラップすることです。以下のコードを参照してください。
List<String> l = new ArrayList<String>();
List<String> unmodifiableList = Collections.unmodifiableList(l);
ImmutableList<String> immutableList= ImmutableList.copyOf(l);
l.add("a");//unmodifiableList is also added "a", immutableList not.
/*My solution as follows:
So unmodifiableList2 is also immutable as ImmutableList.copyOf(l) does*/
List<String> unmodifiableList2= Collections.unmodifiableList(new ArrayList(l));
イミュータブルコレクションについてどう思いますか?ありがとう!