Java 如何检查哈希表中的键是否具有特定的哈希代码?
例如,ht.put(“A”,0);hashcode为65。如何搜索哈希表以查看哈希代码为65的键是否存在?您可以构造一个类,该类的哈希代码就是所讨论的代码:Java 如何检查哈希表中的键是否具有特定的哈希代码?,java,data-structures,Java,Data Structures,例如,ht.put(“A”,0);hashcode为65。如何搜索哈希表以查看哈希代码为65的键是否存在?您可以构造一个类,该类的哈希代码就是所讨论的代码: public class HashCodeWrapper { private final int hashCode; public HashCodeWrapper(int hashCode){ this.hashCode = hashCode; } @Override public i
public class HashCodeWrapper {
private final int hashCode;
public HashCodeWrapper(int hashCode){
this.hashCode = hashCode;
}
@Override
public int hashCode(){
return hashCode;
}
@Override
public boolean equals(Object o){ return this.hashCode == o.hashCode(); }
}
然后,您可以将其传递到
请注意,可能存在哈希冲突,在这种情况下,使用此哈希代码的结果将是任意的。但是,使用空检查,这就足以检查此哈希代码的存在。要实现这一点,您必须遍历map的
entrySet()
,并根据要检查的某个值检查每个键()
,在您的示例中,65
:
Map<String, String> map = new HashMap<String, String>();
public boolean hashCodePresent(int hashCode) {
for (Map.Entry<String, String> mapEntry : map.entrySet()) {
if (mapEntry.getKey().hashCode() == hashCode) {
return true;
}
}
return false;
}
Map Map=newhashmap();
公共布尔hashCodePresent(int hashCode){
对于(Map.Entry mapEntry:Map.entrySet()){
if(mapEntry.getKey().hashCode()==hashCode){
返回true;
}
}
返回false;
}
遍历密钥集并检查。为什么您对hashcode而不是实际的完整值感兴趣?@SotiriosDelimanolis这样做,您就失去了将hashcode拆分为表中存储桶的好处,允许快速查找。我认为在哈希代码上分区比在整个表中搜索键要快。这是我的理解。我没有写我自己的实现我仍然不清楚你想做什么。如果您正在编写自己的哈希表,那么应该使用哈希代码(在哈希表的内部)。如果您使用的是哈希表,哈希代码(和相等性)应该捕获您感兴趣的属性;因此,要搜索一个键,您只需执行table.get(key)
。如果这对你不起作用,请详细解释你正在处理什么以及你正在尝试做什么。可能是在一个新问题中。这告诉您是否有一个键散列到同一个存储桶,换句话说,是否有一个键的散列值与hashCode
对存储桶数组大小进行模化一致。@delnan谢谢,修复了。顺便说一句,我仍然不相信这是一个健壮的解决方案。这当然很聪明,但我不能证明它在所有情况下都是正确的。当然,这是否是OP应该试图解决的实际问题。@delnan,等等,不是。如果你看一下,你会发现确实有一个hashCode和一个equals比较。因此,如果我没有弄错的话,原文仍然有效。@BheshGurung我对当前版本正确性的立场在之前的评论中已经讨论到了穷尽。