的contains
和remove
參數不能僅限於E
因爲你應該能夠給他們恰好等於對象,這是非常有用的。更確切地說,中HashSet.remove
的API說:
...更正式,刪除一個元素e(2 O == NULLé== NULL: o.equals(e)條),如果此集合包含這樣一個元素。
Object.equals
需要Object
作爲參數,這是還使不同類型之間的平等相當有用的。
因此,要啓用contains
和remove
(關於等價類而不是唯一對象標識)的更一般功能,它們必須以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: [[]]
'add'增加了新的元素列表,以便有必要,以確保它是正確的類型。 –