2015-11-08 83 views
2

我使用散列表結構來存儲父文檔(Key)和所有關聯子文檔(Value)與該父文檔的列表之間的映射。這需要稍後迭代來處理映射。列表中的鍵以及每個值通常都是75-100個字符長的文件名。這可以正常工作,但有50000個父文檔,每個文檔都有50-100個與其關聯的子文檔。所以這會在內存中創建一個巨大的對象負載。有沒有更好的方式以有效的內存方式存儲這個映射?字符串到列表的內存有效映射<String>

Map<String, List<String>> docmap=new HashMap<String,List<String>>(); 
+0

您需要迭代已填充的地圖?或者你有空的地圖,你想填充它? –

+0

我需要知道是否有更好的方法來做這個映射,而不是HashMap – prem89

+2

這聽起來像HashMap不是問題,它是你的數據的大小。任何存儲所有不同數據的數據結構都將佔用大量空間,除非您有辦法對其進行壓縮。假設你不能壓縮它,顯而易見的解決方案是將其存儲在數據庫中。 – rghome

回答

1

這應該是內存更有效,因爲它不水桶管理浪費內存:

 String [][] array = new String [50000][]; // parents 
     array[1] = new String[100]; // children for parent 1 
1

您的結構是不是效率低下並且在尋找更好的東西沒有意義的。

我估計你的字符串使用的空間很可能是650MB左右,忽略了hashmaps和列表的開銷。

我不知道ArrayListHashMap的開銷,但與子列表的大小相比,它不會那麼大。即使每個列表和散列條目每個都需要20個字節,這隻會是2MB - 海洋下降。

所以你的問題不是哈希映射或列表 - 它是你的原始數據。

如果650MB內存太多(現在沒有那麼多),那麼你唯一的選擇就是將它存儲在數據庫中。

相關問題