Java Hashmap containKey()方法检查
当我调用containsKey(value)时,当键在映射中时,它返回false。如果有人能检查我的代码,我将不胜感激 我已经试过打印出它们的key和hashmap-toString方法,它们的key在map中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
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;
}