我有一个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]
为什么这会返回我的包裹和哈希键?
如何查看每个列表的内容?
答案 0 :(得分:1)
您需要在toString()
类中覆盖MyClassObj
方法。
例如,假设您的对象具有name
和age
@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);
}