contains
andのパラメータをremove
制限するE
ことはできません。なぜなら、それらに等しいオブジェクトを与えることができるはずだからです。これは非常に便利です。より正確には、の API は次のようにHashSet.remove
述べています。
... より正式には、(o==null ? e==null : o.equals(e)) のような要素 e を削除します (このセットにそのような要素が含まれている場合)。
Object.equals
これはObject
、異なるタイプ間の同等性を有効にするのにも非常に役立ちます。
contains
したがって、 andのより一般的な機能を有効にするにはremove
(オブジェクト ID のみではなく等価クラスで)、それらをObject
パラメーターとして使用する必要があります。
例:
HashSet<ArrayList<String>> set = new HashSet<ArrayList<String>>();
ArrayList<String> list = new ArrayList<String>();
list.add("foo");
LinkedList<String> equalList = new LinkedList<String>();
equalList.add("foo");
set.add(list);
System.out.println(list.equals(equalList)); // prints: true
System.out.println(set.contains(equalList)); // prints: true
System.out.println(set); // prints: [[foo]]
set.remove(equalList);
System.out.println(set); // prints: [[]]