给定哈希码,检查Set是否包含对象

时间:2014-07-08 07:19:41

标签: java search set iteration

我已为自定义对象equals覆盖hashCodeFoo。现在,我有一个对象的哈希码,并想检查该对象是否包含在Set<Foo> fooSet中。除了

之外,是否有更有效的方法来搜索它
for(Foo o : fooSet) {
       if(o.hashCode == inputCode) {
          return true;
       }
 }

2 个答案:

答案 0 :(得分:1)

您基本上无法根据哈希码可靠地确定它。您可以检查集合中的值是否,但即使您找到匹配的哈希码并不意味着集合中的值 。这很少有用,这就是为什么在Set中没有任何公开功能的原因。我不知道有任何更快的方法来实现这个半结果。 (请注意,如果您只有一个Set而不是HashSet,那么内部数据结构中可能没有任何内容记录哈希代码......)

如果确实只关心哈希码的存在,只需存储Set<Integer>而不是全套。但通常这样做并不是非常有用。

答案 1 :(得分:-1)

检查2个对象的哈希码并不能保证对象是等于的,这意味着即使两个对象的哈希码相等,对象也可能不在Set中。

此外,我不明白你有更快的做法的目的。如果你的意思是你想避免循环并寻找一个替代,那么使用Set的contains()方法,如下所示:

fooSet.contains(inputObject);