簡體   English   中英

從HashMaps的HashMap中檢索對象的問題

[英]Issues with retrieving objects from a HashMap of HashMaps

我正在編寫代碼,通過XML文件遞歸迭代並填充HashMaps的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());
                }


            }
        }       
    }

}   

謝謝!

根據OP的要求,以及評論中的討論解決了他的問題 - 我將其作為答案包裝 - 為未來的讀者:

首先,您應該檢查您的密鑰是否確實是String對象。 您可以通過添加以下行來完成:

System.out.println(map.keySet().iterator().next().getClass());

接下來,在我們確定您的密鑰確實是String ,我們想要檢查您是否有不可見的字符或不需要的空格,我們將通過添加以下行來完成:

String s = (String)map.keySet().iterator().next(); 
System.out.println("val=" + s + " length=" + s.length());

如果確實存在不可見的字符 - 我們將知道它,因為長度不匹配。

如果確實是[正如OP所說的那樣]的原因,那么在讀取XML時必須處理字符串以排除這些字符。

另外,作為附注 - 我建議避免使用原始類型,並建議您盡可能使用泛型類型 它將為您提供更易讀的代碼,並且類型安全
如果你想要無限制的嵌套,那么我會使用復合設計模式來實現它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM