我写代码,遍历递归通过一个XML文件,并填充包含HashMap的HashMap中检索对象。我已经能够填充hashmap并且看起来没问题。但是,当我运行这个命令时问题与包含HashMap
System.out.println(map.containsKey("Mary"));
它总是错误的。真的不知道为什么它总是返回false。我也张贴了我的递归代码和HashMap中的内容后
map.toString()
map is { Mary
={24
={established
={western
={Profile=m}}, torn-down
={western
={Profile=b}, eastern
={Profile=m}}}, 44
={established
={western
={Profile=g}, eastern
={Profile=s}}, torn-down
={western
={Profile=j}, western
={Profile=f}}}}, Martha
={24
={established
={western
={Profile=a}}, torn-down
={western
={Profile=b}, eastern
={Profile=n}}}, 44
={established
={western
={Profile=s}, eastern
={Profile=j}}, torn-down
={western
={Profile=k}, eastern
={Profile=g}}}}}
递归代码:
NodeList l = doc.getElementsByTagName("Branches");
Node n = l.item(0);
map = new HashMap();
recurse(n, map);
private void recurse(Node n, HashMap map){
if (n.hasChildNodes()){
NodeList nl = n.getChildNodes();
for(int i= 0; i< nl.getLength(); i++){
Node node = nl.item(i);
if(node.getNodeType() == Node.ELEMENT_NODE){
if (!node.getNodeName().equals("Profile")){
map.put(node.getFirstChild().getNodeValue(), new HashMap());
recurse(node, (HashMap)map.get(node.getFirstChild().getNodeValue()));
}
else {
map.put("Profile", node.getFirstChild().getNodeValue());
}
}
}
}
}
谢谢!
你应该避免尽可能使用原始类型,并且更喜欢使用[泛型类型(http://docs.oracle.com/javase/tutorial/java/generics/gentypes.html) - 它会使你的代码都更具可读性和安全性。如果您正在寻找无限的嵌套 - 我会用复合材料的设计模式来实现它,但它仅仅是一个建议:) – amit 2012-04-19 15:27:55
有“玛丽”前的空间? map.containsKey(“Mary”)给你什么? – Kent 2012-04-19 15:29:39
@kent谢谢,但map.containsKey(“Mary”)仍然返回false。我也尝试在玛丽之后放置空间,但仍然是假的。 – user1192724 2012-04-19 15:41:38