在哈希图中使用对象的实例作为键,然后使用确切的新对象访问它?

2022-08-31 20:45:54

我有一个带有关键对象的hasmap,

HashMap<Key, Object> test;

并将新密钥(“相同”)作为密钥。

所以它喜欢..:

test.put(new Key("the same"), someObject);

(不将该键存储在变量中)

所以。。过了一会儿...我想访问哈希映射,因为我没有对象,我试图制作新的Key(“相同”)并将其作为密钥。但它没有奏效。

如何使它工作?(无需在变量中保存第一个对象“key”)

因此,同时,就目前而言,我使用String对象作为键。

HashMap<String, Object>

答案 1

您需要实现 和 。这些方法的默认实现只是检查实例的相等性(换句话说,只有当两个s实际上是同一个对象时,它们才会相等)。hashCodeequalsKeyObject

进一步阅读

有效的 Java - 所有对象通用的方法


答案 2

您的问题可能没有正确实现(或根本没有实现)。为了用作键,该类必须实现这两种方法以反映两个对象的“相等性”。KeyhashCode()equals()HashMap

如果使用

Key a = new Key("xyz");
Key b = new Key("xyz");

并期望它们相等并在 中工作,您必须重写,以便它在两个实例中返回相同的值,并在比较它们时返回 true。HashMaphashCode()equals()

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

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

@Override
public boolean equals(Object o)
{
    return this.theStringValue.equals(o);
}

应该工作