我想找到和重複使用(如果可能的話),它具有以下屬性的映射實現:自適應地圖Scala中(或Java)保留插入順序
雖然條目的數量很小,比如底層存儲應該像這樣[array0,val0,key1,val1,...]這樣的數組完成。這種存儲方案避免了許多小的Entry對象,並提供了極快的查找速度(即使它們是順序掃描!)。在現代CPU的由於CPU的高速緩存不被無效和缺乏指向堆的指針間接。
地圖應該保持鍵/值對插入順序不分類似的條目數來的LinkedHashMap
我們對巨大的(百萬節點/邊緣)的內存中表示工作Scala中的圖形並且具有這樣的Map將允許我們以更有效的方式存儲節點/邊緣屬性以及每個節點的邊緣,對於具有少量屬性或鄰居的99%以上的節點和邊緣,同時保持兩者的按時間順序的插入順序屬性和邊緣。
如果有人知道具有這些特性的Scala或Java地圖,我會非常感激。
感謝名單
作爲參考,我注意到OP沒有找到我的解決方案令人滿意,並要求我將其刪除。簡而言之,這個想法是將所有東西放在索引數組中,Fortran風格,但是在這個結構中寫出漂亮的包裝,這樣處理起來很愉快。這種方法的優點是速度非常快(由於主要是使用原語),並且自然保留了插入順序(因爲當您需要新條目時,只需將1添加到索引中)。 Fortran和C中的很多圖表工作都是通過這種方式完成的,但我同意我沒有確定所需的地圖。 – 2010-10-06 15:06:33
由於您已經在考慮實施,爲什麼不寫自己的?在數組或者LinkedHashMap中編寫一個封裝器並不難。 – starblue 2010-10-06 19:20:57
您正在使用您的收藏作爲特殊情況。因此你不應該打擾這種正常的儲蓄方式。創建自己的數據結構以獲得更高的性能會很有趣。你可以針對你的情況優化你的結構,因爲你似乎對你的圖形非常瞭解。所以你應該考慮樹木,列表等等,以獲得儘可能高的性能。也許你得到O(n * logn)或更少的runtine性能......;) – 2010-10-07 09:25:29