我在读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方法。相反,它继承了object类的equals方法,后者只是测试对象是否相同。如果将集合或列表转换为仅集合,则不能再测试相同的内容。视图以这种方式工作,因为在此层次结构级别上没有很好地定义等式测试。视图以同样的方式对待哈希代码方法。但是,unmodifiableSet和unmodifiableList方法使用基础集合的相等方法和hashCode方法。
发布于 2013-11-06 19:24:33
通常,两个不相同但内容相同的列表被认为是相等的。两个内容相同的不可修改列表也是相同的。
另一方面,两个不可修改的集合并不仅仅因为它们具有相同的内容而是相等的。
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));发布于 2013-11-06 19:24:17
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)));https://stackoverflow.com/questions/19820811
复制相似问题