我想在 Java 的 HashMap 中检索键的原始对象,最好的方法是什么?
例如
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
Integer keyObj = new Integer(10);
Integer valueObj = new Integer(100);
// And add maybe 1 million other key value pairs here
//... later in the code, if I want to retrieve the valueObj, given the value of a key to be 10
Integer retrievedValueObj = map.get(10);
//is there a way to retrieve the original keyObj object with value 10 from map?
基本上,用户可以在这里查询任何key的值,只为key对象,10只是一个例子。一些评论说,“你已经有了 x 对象,为什么还要得到它?” 嗯,这和说“你已经有了值对象,为什么要得到它”是一样的。这就是 HashMap 数据结构、存储和检索的目的。
检索值对象很容易,但似乎没有多少人知道如何检索关键对象。似乎很多人不明白我为什么要达到 10 的目标并问为什么?为什么不只取值 10。这只是一个大大简化的模型。
好吧,让我提供一些背景信息。keyObj 是另一个数据结构中的数据,我需要这个原始密钥对象的确切引用。比如说,有一个所有键值的链表,如果我想删除链表中的特定节点。
我不仅对值“10”感兴趣,还对内存位置感兴趣,即“10”对象在 Java 中的引用。内存中可能有许多“10”。但那个确切的对象是我想要检索的。
下面的迭代器方法答案给出了 O(n) 方法。但是我正在寻找的是在给定键值的情况下对键 OBJECT 的 O(1) 检索。
我能想到的一种方法是将关键对象也存储在值中,例如
class KeyAndValue {
public Integer key;
public Integer value;
public KeyAndValue(Integer key, Integer value) {
this.key = key;
this.value = value;
}
}
map<Integer, keyAndValueL> map = new map<Integer, keyAndValueL>();
Integer x = new Integer(10);
map.add(x, new KeyAndValue(x, 100));
//then I can retrieve the reference of x, given value of key 10
Integer newKeyObj = map.get(10).key;
但是这种方法使用更多的内存,对我来说就像是一种黑客攻击。我想知道Java中是否有更优雅的方式。