contains
和的参数remove
不能被限制,E
因为你应该能够给它们相等的对象,这非常有用。更准确地说,APIHashSet.remove
说:
...更正式地说,如果该集合包含这样的元素,则删除元素 e 使得 (o==null ? e==null : o.equals(e))。
Object.equals
作为参数,这对于启用不同类型之间Object
的相等性也非常有用。
因此,为了启用contains
and的更一般的功能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: [[]]