Java Hashmap containKey()方法检查

Java Hashmap containKey()方法检查,java,hashmap,Java,Hashmap,当我调用containsKey(value)时,当键在映射中时,它返回false。如果有人能检查我的代码,我将不胜感激 我已经试过打印出它们的key和hashmap-toString方法,它们的key在map中 HashMap<IdentifierInterface, T> hm = new HashMap<IdentifierInterface, T>(); public T getMemory(String v) { if(hm.c

当我调用containsKey(value)时,当键在映射中时,它返回false。如果有人能检查我的代码,我将不胜感激

我已经试过打印出它们的key和hashmap-toString方法,它们的key在map中

    HashMap<IdentifierInterface, T> hm = new HashMap<IdentifierInterface, T>();

    public T getMemory(String v) {

        if(hm.containsKey(v)){

            return hm.get(v);
        }

        return null;
    }

getMemory()中的预期结果为true,实际结果为false。

HashMap键的类型为
IdentifierInterface
,但您正在调用
containsKey(String)

但是,在
equals()
中,使用标识符的
instanceof
,当传入
字符串时,该标识符将始终返回
false


因此,将您的
字符串
转换为
标识符接口
(或者将键改为
字符串

返回标识符.toString().hashCode()中的
标识符是什么?什么是IdentifierInterface,地图中有哪些值可用。如果有两个对象相等,如果它们具有相同的哈希代码值,这不是一个好的做法。您已经定义了一个<代码> map < /COD>,它具有类型<代码> IdentifierInterface < /代码>的键,并且您检查它是否有一个键入代码<代码>字符串>代码>。这永远不会是真的。good catch@JBNizet–具有
IdentifierInterface
类型的键的HashMap永远不会包含
String
类型的键,因此结果总是false。另外,
getMemory()
可以简化为只返回
hm.get(v)
的结果——它要么为null,要么是任何匹配的结果,所以只需执行:
public T getMemory(String v){return hm.get(v);}
您的equals方法可能不应该只查看散列码;它几乎肯定会比较实际的标识符字符串,并检查它们之间是否
相等!!
public int hashCode() {
    return identifier.toString().hashCode();
}


public boolean equals(Object toCompare) {
    if (toCompare instanceof Identifier) {
        if (toCompare.hashCode() == this.hashCode()) {
            return true;
        }
    }
    return false;
}