用Java中的unmodifiableCollection举例说明这一点?

用Java中的unmodifiableCollection举例说明这一点?,java,collections,unmodifiable,Java,Collections,Unmodifiable,我正在阅读Cay S.Horstmann和Gary Cornell编写的《Java核心第一卷-基础》(第九版)。这是书中我不懂的一段。如果你能用一个简单的例子来说明它的意思,那就太好了。谢谢 List<String> staff = new LinkedList<>(); ..... lookAt(Collections.unmodifableList(staff)); ..... ..... ..... List staff=newlinkedlist(); ....

我正在阅读Cay S.Horstmann和Gary Cornell编写的《Java核心第一卷-基础》(第九版)。这是书中我不懂的一段。如果你能用一个简单的例子来说明它的意思,那就太好了。谢谢

List<String> staff = new LinkedList<>();
.....
lookAt(Collections.unmodifableList(staff));
.....
.....
.....
List staff=newlinkedlist();
.....
lookAt(Collections.unmodifilelist(staff));
.....
.....
.....
段落:undmodifiableCollection方法返回一个集合,其equal方法不调用基础集合的equals方法。相反,它继承了object类的equals方法,该方法只测试对象是否相同。如果将集合或列表转换为集合,则无法再测试相等的内容。视图以这种方式工作,因为在这个层次结构级别上没有很好地定义平等性测试。视图以相同的方式处理哈希代码方法。 但是,unmodifiableSet和unmodifiableList方法使用基础集合的equals和hashCode方法。

List list1=new ArrayList();
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.添加(“foo”); List list2=新的ArrayList(); 清单2.添加(“foo”); System.out.println(“列表是否相等:+list1.equalas(list2)); System.out.println(“未加载的集合是否相等:”+ Collections.unmodifiableCollection(list1).equals( 集合。不可修改的集合(列表2)); System.out.println(“卸载列表是否相等:”+ Collections.unmodifiableList(list1).equals( 集合。不可修改列表(列表2));
列表列表1=新的ArrayList();
清单1.添加(“foo”);
List list2=新的ArrayList();
清单2.添加(“foo”);
System.out.println(“列表是否相等:+list1.equalas(list2));
System.out.println(“未加载的集合是否相等:”+
Collections.unmodifiableCollection(list1).equals(
集合。不可修改的集合(列表2));
System.out.println(“卸载列表是否相等:”+
Collections.unmodifiableList(list1).equals(
集合。不可修改列表(列表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));
List list1=new ArrayList();
列表1.add(Integer.valueOf(1));
列表1.add(Integer.valueOf(2));
List list2=新链接列表();
列表2.add(Integer.valueOf(1));
列表2.add(Integer.valueOf(2));
//真的!
System.out.println(list1.equals(list2));
List unModList1=集合。不可修改列表(list1);
List unModList2=集合。不可修改列表(list2);
//真的!
System.out.println(unModList1.equals(unModList2));
Collection unModColl1=Collections.unmodifiableCollection(列表1);
Collection unModColl2=Collections.unmodifiableCollection(列表2);
//假的
System.out.println(unmdcoll1.equals(unmdcoll2));

通常情况下,不属于同一列表但具有相同内容的两个列表被视为相等。具有相同内容的两个不可修改列表同样相等

另一方面,两个不可修改的集合并不因为内容相同而相等

        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));
List list1=new ArrayList();
列表1.add(Integer.valueOf(1));
列表1.add(Integer.valueOf(2));
List list2=新链接列表();
列表2.add(Integer.valueOf(1));
列表2.add(Integer.valueOf(2));
//真的!
System.out.println(list1.equals(list2));
List unModList1=集合。不可修改列表(list1);
List unModList2=集合。不可修改列表(list2);
//真的!
System.out.println(unModList1.equals(unModList2));
Collection unModColl1=Collections.unmodifiableCollection(列表1);
Collection unModColl2=Collections.unmodifiableCollection(列表2);
//假的
System.out.println(unmdcoll1.equals(unmdcoll2));

为什么要使用
Integer.valueOf
?与过去认为自动装箱/取消装箱是万恶之源的人一起工作的习惯力量,不值得在代码审查中与他们争论:)为什么要使用
Integer.valueOf
?与过去认为自动装箱/取消装箱是万恶之源、不值得在代码审查中与他们争论的人一起工作的习惯力量?:)