我们如何有效地将所有树节点存储到HashMap中?

时间:2013-05-08 11:41:16

标签: java collections map hashmap

我们试图以线性方式将所有树节点存储到HashMap中(遍历节点之后的节点)和运行到内存问题(OutOfMemoryError:Java堆空间),最大内存设置为90mb (-Xmx90M)

以下是我们使用的代码(在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或任何其他集合中以便以后检索它?

1 个答案:

答案 0 :(得分:0)

正如我所说,使用HashMaps作为树中的节点是一个糟糕的想法 - 超过几百个元素的开销会让你活着。

但是对于字符串节点ID,您可以使用具有连接ID值的单个HashMap,la&#34; a.b.c&#34;或&#34; a / b / c&#34;。你不能遍历&#34;树非常好,但你可以非常有效地找到一个特定的元素。