пример, чтобы проиллюстрировать этот момент на немодифицируемой коллекции в Java?

Я читаю Core Java Volume I - fundamentals (9th edition) by Cay S. Horstmann and Gary Cornell. Вот абзац из книги, который я не понимаю. Если бы вы могли продемонстрировать на простом примере, что это значит, было бы здорово. Спасибо

List<String> staff = new LinkedList<>();
.....
lookAt(Collections.unmodifableList(staff));
.....
.....
.....

paragraph : методы undmodifiedCollection возвращают коллекцию, чей метод equals не вызывает метод equals базовой коллекции. Вместо этого он наследует метод equals класса объектов, который просто проверяет, идентичны ли объекты. Если вы превратите набор или список в просто коллекцию, вы больше не сможете проверять одинаковое содержимое. Представление действует таким образом, потому что на этом уровне иерархии проверка на равенство не определена четко. Представление обрабатывает метод хеш-кода таким же образом. Однако методы unmodifiedSet и unmodifiableList используют методы equals и hashCode базовых коллекций.


person eagertoLearn    schedule 06.11.2013    source источник


Ответы (1)


Обычно два списка, которые не являются одним и тем же списком, но имеют одинаковое содержимое, считаются равными. Два неизменяемых списка с одинаковым содержимым равны.

С другой стороны, две неизменяемые коллекции не равны только потому, что у них одинаковое содержимое.

        List<Integer> list1 = new ArrayList<Integer>();
        list1.add(Integer.valueOf(1));
        list1.add(Integer.valueOf(2));
        List<Integer> list2 = new LinkedList<Integer>();
        list2.add(Integer.valueOf(1));
        list2.add(Integer.valueOf(2));
//True!
        System.out.println(list1.equals(list2));

        List<Integer> unModList1 = Collections.unmodifiableList(list1);
        List<Integer> unModList2 = Collections.unmodifiableList(list2);
//True!
        System.out.println(unModList1.equals(unModList2));

        Collection<Integer> unModColl1 = Collections.unmodifiableCollection(list1);
        Collection<Integer> unModColl2 = Collections.unmodifiableCollection(list2);
//False
        System.out.println(unModColl1.equals(unModColl2));
person Affe    schedule 06.11.2013
comment
Зачем использовать Integer.valueOf? - person Tedil; 06.11.2013
comment
Сила привычки от работы с людьми в прошлом, которые считали, что автоматическая упаковка/распаковка — это корень всех зол, и не стоило спорить с ними в код-ревью? :) - person Affe; 06.11.2013