我已为自定义对象equals
覆盖hashCode
和Foo
。现在,我有一个对象的哈希码,并想检查该对象是否包含在Set<Foo> fooSet
中。除了
for(Foo o : fooSet) {
if(o.hashCode == inputCode) {
return true;
}
}
答案 0 :(得分:1)
您基本上无法根据哈希码可靠地确定它。您可以检查集合中的值是否,但即使您找到匹配的哈希码并不意味着集合中的值 。这很少有用,这就是为什么在Set
中没有任何公开功能的原因。我不知道有任何更快的方法来实现这个半结果。 (请注意,如果您只有一个Set
而不是HashSet
,那么内部数据结构中可能没有任何内容记录哈希代码......)
如果确实只关心哈希码的存在,只需存储Set<Integer>
而不是全套。但通常这样做并不是非常有用。
答案 1 :(得分:-1)
检查2个对象的哈希码并不能保证对象是等于的,这意味着即使两个对象的哈希码相等,对象也可能不在Set中。
此外,我不明白你有更快的做法的目的。如果你的意思是你想避免循环并寻找一个替代,那么使用Set的contains()方法,如下所示:
fooSet.contains(inputObject);