Java 在hashmap中使用对象的实例作为键,然后使用新对象访问它?

Java 在hashmap中使用对象的实例作为键,然后使用新对象访问它?,java,hashmap,Java,Hashmap,我有一个带关键对象的hasmap HashMap<Key, Object> test; (不将该键存储在变量中) 所以。。过了一会儿。。。我想访问hashmap, 因为我没有对象,所以我尝试创建新的键(“相同”)并将其作为键。 但它不起作用 如何让它工作?(不保存变量中的第一个对象“键”) 所以,现在,我使用字符串对象作为键 HashMap<String, Object> HashMap 您需要在键上实现hashCode和equals。这些方法的作用只是检查实例是否相

我有一个带关键对象的hasmap

HashMap<Key, Object> test;
(不将该键存储在变量中)

所以。。过了一会儿。。。我想访问hashmap, 因为我没有对象,所以我尝试创建新的键(“相同”)并将其作为键。 但它不起作用

如何让它工作?(不保存变量中的第一个对象“键”)

所以,现在,我使用字符串对象作为键

HashMap<String, Object>
HashMap

您需要在
键上实现
hashCode
equals
。这些方法的作用只是检查实例是否相等(换句话说,两个
Object
s只有在它们实际上是同一个对象时才会相等)

进一步阅读

当类不重写
equals()
hashCode()
方法时,将使用
对象上的默认实现。特别是,
equals()
只是检查引用的相等性

这立即解释了您的方法不起作用的原因:新的
对象显然不是指旧的
对象


如果希望能够指定具有相同属性的新实例,则应使用满足键相等条件的实现重写
equals()
方法。您还应该重写
hashCode()
,以完全控制键比较过程。

您的问题可能是
key
没有正确实现
hashCode()
equals()
。为了用作
HashMap
键,类必须实现这两种方法来反映两个对象的“相等”

如果使用创建两个不同的实例

Key a = new Key("xyz");
Key b = new Key("xyz");
如果希望它们相等并在
HashMap
中工作,则必须重写
hashCode()
,以便它在两个实例中返回相同的值,并且在比较它们时
equals()
返回true

如果对象标识基于字符串值,则

@Override
public int hashCode()
{
    return theStringValue.hashCode();
}


应该有效

很难知道你的问题是什么。你可能想考虑改写它…如果您只需要hashmap中的所有键,您可以使用方法
keySet()
…不重复:另一个问题不直接处理映射,而是直接处理
hashCode
equals
,如果没有接受的答案,这两个问题可能看起来不相关。接受的答案足以理解这个问题。如果您在Eclipse中工作,只需右键单击并转到Source>Generate hashCode()和equals()…选择要包含在这些方法中的属性,代码将自动生成。节省时间!谢谢@ruhong,我用eclipse轻松生成了它们
@Override
public int hashCode()
{
    return theStringValue.hashCode();
}
@Override
public boolean equals(Object o)
{
    return this.theStringValue.equals(o);
}