2013-05-08 47 views
1

我們正在努力的所有樹節點的存儲到以線性方式一個HashMap(遍歷節點之後節點)和運行到內存的問題(的OutOfMemoryError:Java堆空間),最大內存設置爲90MB(-Xmx90M)我們如何有效地將所有樹節點存儲到HashMap中?

這是我們所使用的代碼(包含一個HashMap內HashMap中):

HashMap<Integer, MyNode> refNodeMap 
HashMap<String, HashMap<Integer, MyNode>> spNodeMap; 
String Id; 

toCopy是類型MYNODE對象。

if (refNodeMap.containsKey(Id)) { 
    spNodeMap.get(Id).put(toCopy.getId(), toCopy); 
} else { 
    spNodeMap.put(Id, new HashMap<Integer, MyNode>()); 
    spNodeMap.get(Id).put(toCopy.getId(), toCopy); 
} 
  1. 我們能否避免使用innerHashMap用一個類的對象?如果是的話怎麼會這個類是什麼樣子?
  2. 我們如何有效地將所有樹節點存儲到HashMap或任何其他集合中以便稍後檢索它?
+0

什麼是你試圖存儲的數據/信息?以及如何/將在哪裏使用它們 – Adarsh 2013-05-08 11:57:26

+0

使用HashMap實現樹中的節點是一個糟糕的主意。 HashMap有很多存儲開銷。 – 2013-05-08 11:57:48

+0

你可能應該解釋一下你的「樹節點」是什麼,以及你爲什麼將它們放入hashmaps。多少節點是「全部」節點?對於某些節點,您將永遠耗盡內存。 – 2013-05-08 11:57:51

回答

0

正如我所說的,使用HashMaps作爲樹中的節點是一個糟糕的主意 - 超過幾百個元素的開銷會讓你活着。

但是對於字符串節點ID,您可以使用帶有級聯ID值的單個HashMap,la「a.b.c」或「a/b/c」。你不能很好地「遍歷」樹,但你可以非常有效地找到一個特定的元素。

+0

樹節點是我的自定義類對象。在構建一個超集樹之後,並根據節點ID選擇該節點之後,我需要顯示一個詳細信息表。因此存儲它如果HashMap是一個storate開銷,有人可以推薦我如何去存儲它? – user1782807 2013-05-08 12:28:13

相關問題