我有一个KeyObject消耗了相当多的内存。 KeyObject还有一个hashValue和一个equals方法。
现在我想在我的内存中只保存一次唯一的KeyObject,并在相等的情况下使用对该对象的引用(等于==)。
我以为我可以使用Set但是我无法获得原始的KeyObject。我只能用新的替换现有的。
这就是我在pseude代码中的意思:
Keybject a = new Keybject("a");
Keybject b = new Keybject("a");
boolean thisIsTrue = a.equals(b);
boolean thisIsFalse a == b;
Map<KeyObject, Value> largeMapA = new HashMap<>();
Map<KeyObject, Value> largeMapB = new HashMap<>();
largeMapA.put(a, "value a");
largeMapB.put(b, "value b");
现在我有两次大型KeyObject - &gt;每个largeMap一个,但只有一个KeyObject(a.equals(b))就足够了,并使用第二个map的引用。
所以我想要这样的事情:
KeyObject b = if there is already a equal object ("a") in my "cache" then use "a"
largeMapA.put(a, "value a");
largeMapB.put(b, "value b"); // Now I have ONE large KeyObject
// this is just a reference to a
唯一唯一的解决方案是循环输入largeMapA并找到一个相等的键然后替换b:
for (KeyObject ko : largeMapA.keySet()) {
if (ko.equals(b)) {
b = ko;
break;
}
}
但这似乎不是一个高效的解决方案......
答案 0 :(得分:0)
您可以使用其中键与值相同的HashMap<KeyObject,KeyObject>
。
if (map.contains(b))
会告诉您缓存中是否包含密钥。map.get(b)
会给你那把钥匙。map.put(b,b)