1

我们正在尝试以线性方式将所有树节点存储到 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 或任何其他集合中以便以后检索它?
4

1 回答 1

0

正如我所说,使用 HashMaps 作为树中的节点是一个糟糕的主意——超过几百个元素的开销会吃掉你。

但是对于字符串节点 ID,您可以使用带有连接 ID 值的单个 HashMap,例如“abc”或“a/b/c”。您不能很好地“遍历”树,但您可以非常有效地找到特定元素。

于 2013-05-08T12:02:20.713 回答