我已经重写了equals
和hashCode
,用于定制对象Foo
。现在,我有了对象的哈希代码,并希望检查对象是否包含在Set<Foo> fooSet
中。是否有更有效的方法来寻找它?
for(Foo o : fooSet) {
if(o.hashCode == inputCode) {
return true;
}
}
发布于 2014-07-07 23:22:18
基本上,您无法根据哈希代码可靠地确定它。您可以检查一个值肯定不在集合中,但是即使您找到了一个匹配的哈希代码,但这并不意味着该值在集合中。这很少有用,这就是为什么Set
中没有任何公开功能的原因。我不知道有什么更快的方法来达到这个半途而废。(请注意,如果您只是得到了一个Set
而不是一个HashSet
,那么内部数据结构中很可能没有任何东西记录了哈希代码.)
如果您真的只关心哈希代码的存在,只需存储一个Set<Integer>
而不是完整的集合。但通常这样做并不十分有用。
发布于 2014-07-07 23:27:45
检查两个对象的哈希代码并不能保证对象是相等的,这意味着即使两个对象的哈希代码相等,对象也可能不在集合中。
我也不明白你想用更快的方式去做。如果您的意思是要避免循环和寻找备选方案,那么请使用Set的below()方法,如下所示:
fooSet.contains(inputObject);
https://stackoverflow.com/questions/24625884
复制