我不确定我理解的不可变集合的缺陷是否正确,所以我在这个答案中列出了它们。希望有人在这里纠正我。
a):与 Collections.unmodifiableXXX() 相比,ImmutableXXX.copyOf()失去了源集合特性。例如,当将linkedList 放入ImmutableList.copyOf() 时,ImmutableList 不再链接。与基于树的集合相同。
b):人们认为 Collections.unmodifiableXXX 只是使用了源集合的相同引用,所以一旦源集合改变,Collections.unmodifiableXXX 也会改变。但我的解决方案是将源集合包装到传递给 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));
你对不可变集合的理解是什么?谢谢!