0

私は読んでCore Java Volume I - fundamentals (9th edition) by Cay S. Horstmann and Gary Cornellいます。ここに、私が理解できない本の段落があります。それが何を意味するかを簡単な例で示すことができれば、それは素晴らしいことです. ありがとう

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

paragraph : undmodifiableCollection メソッドは、equal メソッドが基礎となるコレクションの equals メソッドを呼び出さないコレクションを返します。代わりに、オブジェクト クラスの equals メソッドを継承します。これは、オブジェクトが同一であるかどうかをテストするだけです。セットまたはリストを単なるコレクションにすると、内容が等しいかどうかをテストできなくなります。この階層レベルでは等価性テストが明確に定義されていないため、ビューはこのように動作します。ビューは、ハッシュ コード メソッドを同じように扱います。ただし、unmodifiableSet および unmodifiableList メソッドは、基礎となるコレクションの equals および hashCode メソッドを使用します。

4

2 に答える 2

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)));
于 2013-11-06T19:24:17.757 に答える
2

通常、同じリストではないが同じ内容を持つ 2 つのリストは等しいと見なされます。同じ内容を持つ 2 つの変更不可能なリストは、同様に同等です。

一方、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));
于 2013-11-06T19:24:33.987 に答える