为什么Set不提供获取与另一个元素相等的元素的操作?
Set<Foo> set = ...;
...
Foo foo = new Foo(1, 2, 3);
Foo bar = set.get(foo); // get the Foo element from the Set that equals foo
我可以问Set是否包含一个等于bar的元素,那么为什么我不能得到那个元素呢?:(
为了澄清,equals方法被重写,但它只检查其中一个字段,而不是所有字段。两个相等的Foo对象可以有不同的值,这就是为什么我不能只用Foo。
哈希码的契约清楚地表明:
如果根据Object方法,两个对象是相等的,那么在这两个对象上调用hashCode方法必须产生相同的整数结果。
所以你的假设是
为了澄清,equals方法被重写,但它只检查其中之一
田地,不是全部。所以两个相等的Foo对象可以
有不同的值,这就是为什么我不能只使用foo。”
是错误的,你违反了合同。如果我们看Set接口的"contains"方法,我们有:
boolean contains(Object o);
如果此集合包含指定的元素,则返回true。更多的
形式上,当且仅当此集合包含元素时返回true
"e"使得o==null ?E ==null: o. = (E)
为了实现您想要的效果,您可以使用Map,在其中定义键并使用定义对象如何彼此不同或相等的键存储元素。