類HashMap,但內存減少到原1/6的實現

java中的Map在提供方便實用的同時,也存在內存浪費巨大的問題。當Map中的Entry數量達到1000萬 條以上的時候,需要數G的內存空間 .這裏提到的Map使用形式爲HashMap<String,Byte>,平均每個key在20個字符左右,最多不超過200字符.

在實際情況下,有差不多5/6的內存浪費 在存放實際數據無關的地方.在一些一次寫入多次讀去的地方,完全沒有必要浪費這麼多的資源,下面就通過一個簡單的實現說明。

算法說明:

按照key的長度信息將所有的entry放進不同的隊列中,爲了方便此時的entry隊列已經排好序,當然也可以加進內存後再排序.

現在有很多的隊列了,在查詢的時候根據查詢詞長度選擇一個隊列,在隊列中通過2分法查找.

算法適用性:

適用於key值集中在一定範圍,value爲簡單類型(byte、int、long、float、double等),數據量在百萬條以上,內存匱乏的情況.

 

測試結果:

測試數據爲7138595條Entry,分佈在250個隊列中.

HashMap<String,Byte>的結果:

時間: 3780、3814

內存: 892M

此方法的結果:
時間:5792、5758

內存: 158M

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章