Java 如何检查哈希表中的键是否具有特定的哈希代码?

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

例如,ht.put(“A”,0);hashcode为65。如何搜索哈希表以查看哈希代码为65的键是否存在?

您可以构造一个类,该类的哈希代码就是所讨论的代码:

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我对当前版本正确性的立场在之前的评论中已经讨论到了穷尽。