Я не уверен, что дефекты Неизменных коллекций, которые я понимаю, являются правильными, поэтому я перечисляю их в этом ответе.Надеюсь, что кто-то исправляет меня здесь.
a): По сравнению с Collections.unmodifiableXXX (), ImmutableXXX.copyOf () теряет функцию сбора исходного кода .Например, когда связанный список добавляется в 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));
Как вы понимаете коллекцию Неизменных?Спасибо!