我有一個KeyObject消耗一定量的內存。 KeyObject也有一個hashValue和一個equals方法實現。在平等的情況下緩存和使用一個對象 - 相同的對象應該得到引用
現在我想只在我的記憶中保存每一個唯一的KeyObject,並且只要在相等(等於==)的情況下使用對這個對象的引用。
我以爲我可以使用一套,但我不能得到原來的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兩次 - >爲每個largeMap,但它足以只有一個KeyObject(a.equals(B ))並使用第二張地圖的參考。
所以我想是這樣的:
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;
}
}
但這似乎不是一個高性能的解決方案...
這是幾乎可以肯定是一個非常不成熟的優化。不要擔心這一點,直到你用一個探查器證明這實際上是一個重大問題之前,讓你的代碼變得更加複雜。一般來說,如果您的對象可能都是平等和非常大的,那麼您的核心數據模型就會出現問題。 – chrylis 2014-10-27 12:25:50