从HashMap打印值本身不会返回值

时间:2018-09-11 13:35:20

标签: java hashmap

我有一个HashMap如下:

HashMap<Integer, List<MyClassObj>> hmap = new HashMap<Integer, List<MyClassObj>>();

在循环中,我附加到一个列表,然后放入一个键值对,其中列表是我的hmap对象中的值

如何为每个键提取列表中的值?

for (Integer k: hmap.keySet()) {
    String key = k.toString();
    String value = hmap.get(k).toString();
    System.out.println(key + " " + value);
}

这将输出:

43115 [mypackage@176f3f8, mypackage@176f3f8, mypackage@176f3f8]
40715 [mypackage@176f3f8, mypackage@176f3f8, mypackage@176f3f8]

为什么这会返回我的包裹和哈希键?

如何查看每个列表的内容?

3 个答案:

答案 0 :(得分:1)

您需要在toString()类中覆盖MyClassObj方法。

例如,假设您的对象具有nameage

@Override
public String toString() { 
    return "Name: '" + this.name + "', Age: '" + this.age + "'";
} 

然后,您需要遍历List的元素并打印出来(使用toString()方法)。例如,

for(int i = 0; i < youObjectInstance.size(); i++) {
    System.out.println(youObjectInstance.get(i).toString());
}

作为一般建议,您应该为几乎所有创建的对象覆盖toString()方法,以便可以根据用例以方便的格式打印它。

答案 1 :(得分:0)

回答您的问题:Java正在打印它正在打印的内容,因为您正在尝试打印列表对象。 toString的默认实现显示对象的存储地址的表示形式。

我假设您想对列表中的每个键的每个对象执行某些操作。在这种情况下,您可以使用Java中的条目集。 您的情况是这样的:

for (Map.Entry<Integer, List<myObject>> entry : hmap.entrySet()) {
    for (String s : entry.getValue()) { 
        //do something with the object     
    }
}

外部循环为您提供所有整数->列表对。内部循环使您可以访问之前添加到该列表的每个对象。

答案 2 :(得分:0)

这里是代码片段,供您更好地理解。如前所述,您应该覆盖toString()的{​​{1}}方法,类MyClassObj将作为Person的示例。

MyClassObj

Person对象在哪里

    HashMap<Integer, List<Person>> hmap = new HashMap<>();
    List<Person> personList1 = Arrays.asList(new Person("John", 31, "green", "football"),
            new Person("Thomas", 25, "blue", "basketball"));
    List<Person> personList2 = Arrays.asList(new Person("Susan", 28, "black", "surfing"));
    hmap.put(0, personList1);
    hmap.put(1, personList2);

    for (Integer k: hmap.keySet()) {
        String key = k.toString();
        String value = hmap.get(k).toString();
        System.out.println(key + " " + value);
    }