Учтите это:
Set<String> x = new HashSet<String>();
x.add("foo");
ImmutableSet<String> guava = ImmutableSet.copyOf(x);
Set<String> builtIn = Collections.unmodifiableSet(x);
x.add("bar");
System.out.println(guava.size()); // Prints 1
System.out.println(builtIn.size()); // Prints 2
Другими словами, ImmutableSet
является неизменным, независимо от того, какую коллекцию он построил из-за возможного изменения - потому что он создает копию.Collections.unmodifiableSet
предотвращает прямое изменение коллекции , возвращенной , но это все еще вид на потенциально изменяющийся набор резервных копий.
Обратите внимание, что если вы начнете изменять содержимое объектов ссылается на любой сет, все ставки в любом случае отключены.Не делай этого.Действительно, редко бывает хорошей идеей создавать набор с использованием изменяемого типа элемента.(То же самое сопоставляется с использованием изменяемого типа ключа.)