2011-04-15 24 views
0

我試圖在非常內存受限的環境中實現一個Map。我預計地圖的值類型會有很多重複(即不僅僅是有很多x和y使得x.equals(y),而是許多x和y使得x == y)。因此,我想將這些指針保存在一個小數組中(通常情況下,少於幾十個條目),並使用從字節數組中擴充出來的整數對其進行索引;通常這會導致大量節省。儘管如此,這需要通過某種方式來跟蹤不同的引用。我可以在一些列表中對它們全部進行跟蹤,並在每次添加新值時對其進行線性搜索,但這樣地圖不會縮放到超過幾百個不同的值(即使大量不同的值價值是不常見的,這不是不可能的)。這種映射對於內部Java類來說應該很容易實現,因爲它只需要進行指針比較,但是這個接口似乎沒有公開(事實上,因爲默認的Object hashCode方法只是返回底層的指針大多數實現中,我處於一個諷刺的地位,就是被實現hashCode的用戶所傷害的Map實現者)。在Java中維護一組不同的對象

有沒有辦法得到這種行爲?

+0

IdentityHashMap? – MeBigFatGuy 2011-04-15 04:07:59

回答

2

您是否在尋找java.lang.System.identityHashCode(Object)==運營商?

+0

像[IdentityHashMap](http://download.oracle.com/javase/6/docs/api/java/util/IdentityHashMap.html) – 2011-04-15 04:07:34

+0

是的,這將是偉大的工作;謝謝。 – 2011-04-15 04:07:42

0

正如你可以考慮以下的選擇:如果你有一個地圖,你有很多dublicate值(其中entry1.getValue() == entry2.getValue()),那麼你可以使用你的當前值作爲一個重要的

,以及當前鍵指向內存中與項目列表相同的對象。

Map<SomeType1, List<SomeType2> map = new IdentityHashMap<SomeType1, List<SIneType2>>(); 
相關問題