我正在阅读Core Java Volume I - fundamentals (9th edition) by Cay S. Horstmann and Gary Cornell
。这是我不懂的书中的一段。如果你能用一个简单的例子证明它意味着什么,那就太好了。感谢
List<String> staff = new LinkedList<>();
.....
lookAt(Collections.unmodifableList(staff));
.....
.....
.....
段落:undmodifiableCollection方法返回一个集合,其equal方法不会调用基础集合的equals方法。相反,它继承了对象类的equals方法,它只测试对象是否相同。如果将集合或列表转换为集合,则无法再测试相同的内容。视图以这种方式起作用,因为在此级别的层次结构中没有明确定义相等性测试。视图以相同的方式处理哈希码方法。 但是,unmodifiableSet和unmodifiableList方法使用底层集合的equals和hashCode方法。
答案 0 :(得分:2)
List<String> list1 = new ArrayList<String>();
list1.add("foo");
List<String> list2 = new ArrayList<String>();
list2.add("foo");
System.out.println("Are lists equal: " + list1.equlas(list2));
System.out.println("Are unmod collections equal: " +
Collections.unmodifiableCollection(list1).equals(
Collections.unmodifiableCollection(list2)));
System.out.println("Are unmod lists equal: " +
Collections.unmodifiableList(list1).equals(
Collections.unmodifiableList(list2)));
答案 1 :(得分:2)
通常,两个不同列表但具有相同内容的列表被认为是相同的。具有相同内容的两个不可修改的列表同样相等。
另一方面,两个不可修改的集合并不相同,只是因为它们具有相同的内容。
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));