如何针对唯一键在hashmap中存储多个值

时间:2011-06-14 07:41:23

标签: java hashmap

您好我必须使用UI显示值验证数据库值,因此我使用Watij作为自动化工具。 当我必须将数据库值存储到hashmap中时会出现问题。 假设数据库有3个字段名称,电子邮件和地址。 在触发查询后,获取的行为10。 我将字段值作为hashmap中的Key,将检索到的行作为值。

我无法将值存储在hashmap中。当我使用hashmap时,值被覆盖,最后我总是得到相应键的单个值。我尝试声明hashmap有两个参数作为字符串和字符串[]但我无法读取最终值。 任何人都可以提供帮助,因为我不是Java专家。 感谢。

4 个答案:

答案 0 :(得分:1)

你在哪里声明了这个字符串?您必须在循环中声明它(循环遍历结果集)。如果您没有在循环内创建新对象,则相同字符串的引用将存储在hashmap的所有值中,您将在hashmap中获得单个值。如果这里也提到了代码,那么很容易找出确切的问题。

答案 1 :(得分:1)

在地图中,密钥必须是唯一的,所以如果你继续添加(email,blabla @ hotmail.com)并且它已经有了(email,nana @ gmail.com),你就可以覆盖第一个。如果你想要的只是一个电子邮件,地址和名字的列表,那么创建一个名为person or something的类并将它们添加到列表中会更好吗?

与人(姓名,电子邮件,地址)一样,然后将其添加到列表中。

答案 2 :(得分:1)

在hashmap中存储对象时,可以使用该对象的哈希码作为键,然后将对象本身保存为值,但要确保正确实现hasCode()equals方法,如你所知,hashmap内部使用hashcode()和'equals`方法来存储数据。

现在,当实现hashcode或equals方法时,您可以使用任何属性(该行的列),您认为该属性唯一地标识该行。

而且,性能方面,这将是一种更好的方法。

答案 3 :(得分:1)

你可以制作一个像HashMap<String, Data>这样的地图,其中第一个参数是关键(我想假设String,你可以使用你想要的东西),而Data是一个包含的类密钥的数据值。 Data可能是:

public class Data {

    private String name;
    private String address;
    private String email;

    ...
}

您可以使用map.put(key, new Data(...))将对象添加到地图中。 一种更简单的方法是在像HashMap<String,String[]>这样的地图中使用数组,但不是很有用。数据库查询的Java思想是创建对象来封装每条记录。