В чем разница между Collections.unmodifiableSet () и ImmutableSet в Guava?

JavaDoc из ImmutableSet говорит:

В отличие от Collections.unmodifiableSet , который представляет собой представление отдельной коллекции, которая все еще может изменяться, экземпляр этого класса содержит свои собственные личные данные и никогда не изменится. Этот класс удобен для общедоступных статических конечных наборов («постоянных наборов»), а также позволяет вам легко создавать «защитную копию» набора, предоставленного вашему классу вызывающей стороной.

Но ImmutableSet по-прежнему хранит ссылки на элементы, я не мог понять разницу с Collections.unmodifiableSet () . Пример:

StringBuffer s=new StringBuffer("a");
ImmutableSet<StringBuffer> set= ImmutableSet.of(s);
s.append("b");//s is "ab", s is still changed here!

Кто-нибудь может объяснить это?

42
задан ROMANIA_engineer 24 December 2016 в 10:32
поделиться