HashMap保持较旧的值

时间:2012-04-02 05:53:16

标签: java hashmap

我有一个场景,我迭代从查询

获得的结果集中的一组行

- > QUERY

System.out.println("---Iterating Events---");
while (rs.next()) {

startOfMethod(rs);
}

startOfMethod(ResultSet result)
{
HashMap hmap;
String applicationGroupMap;
String description; 
description = result.getString("description"); //description is an XML string
hmap = new XMLRead().xmlDataOutput(description); //This is a separate class which returns a hashmap
applicationGroupMap = (String) hmap.get("Attribute.applicationGroupMap");
}

问题在于,有时当它从第一行迭代到第二行而第二行没有“Attribute.applicationGroupMap时,它会保留旧值。

有谁能告诉我如何在每次迭代时刷新hmap?

返回Hmap的代码: -

try {
                Document doc = convertToDocument(xmlStr);

                String hashKey = "";
                String hashValue = "";

                NodeList listOfKeyValues = doc.getElementsByTagName("k");

                for (int s = 0; s < listOfKeyValues.getLength(); s++) {

                        Node firstNode = listOfKeyValues.item(s);

                        if (firstNode.getNodeType() == Node.ELEMENT_NODE) {

                                Element firstElement = (Element) firstNode;

                                NodeList keyList = firstElement.getChildNodes();
                                hashKey = ((Node) keyList.item(0)).getNodeValue().trim();

                                NodeList listOfvalues = doc.getElementsByTagName("v");

                                Node secondNode = listOfvalues.item(s);

                                Element valueElement = (Element) secondNode;

                                NodeList valueList = valueElement.getChildNodes();
                                if (valueList.getLength() != 0) {
                                        hashValue = ((Node) valueList.item(0)).getNodeValue();
                                } else {
                                        hashValue = "";
                                }
                                hsMap.put(hashKey, hashValue);
                        }
                }
        } catch (Throwable t) {

                t.printStackTrace();
        }
        return hsMap;
}

2 个答案:

答案 0 :(得分:1)

您的hmap变量甚至不应该是成员变量,更不用说静态了。它应该是方法本地的,并且该方法应该在每次调用时分配一个新的。

标题的更准确版本是“旧HashMap保留旧值”。

答案 1 :(得分:0)

根据评论中的对话,您有两种选择:

hsMapXMLRead的声明更改为

public HashMap hsMap = new HashMap();

(不是static。制作private可能更正确,但这与您的问题无关。)

- 或 -

startOfMethod

hmap.clear();

在你得到你想要的东西后清除地图。