如果我有如下的Hashmap:
Hashmap<String, Node> nodeMap = new HashMap<String, Node>();
和Node存储多个值包括:
String name,
int year,
double weight
如何打印出存储在此hashmap中的多个值之一? 我实际上不知道只打印其中一个值(这是我最需要的) 但首先,我尝试使用以下查询
首先打印所有值Set<String> keySet= nodeMap.keySet();
for(String x:keySet){
System.out.println(nodeMap.get(x));
}
但是,我得到的输出例如Node@73a28541, Node@6f75e721, Node@69222c14.
我正在尝试获得真正的价值,例如名称,年份,以及Hashmap中每个键的权重是多少,但它仍然无效。
我实际上需要知道如何打印其中一个值..
任何帮助都会非常感激。谢谢
修改 这就是我存储Hashmap和节点值的方式:
Node n = new Node(resultSet.getString(1), resultSet.getInt(2),weight);
nodeMap.put(resultSet.getString(1),n);
我的预期输出是,如果我有某个键,例如123,我想得到123键的年份值。
答案 0 :(得分:3)
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class TestMap {
static class Node {
public String name;
public int year;
public double weight;
public Node(String name, int year, double weight) {
this.name = name;
this.year = year;
this.weight = weight;
}
@Override
public String toString() {
// here you can create your own representation of the object
String repr = "Name:" + name + ",year:" + year + ",weight:" + weight;
return repr;
}
}
public static void main(String args[]) {
Map<String, Node> map = new HashMap<String, Node>();
Node node1 = new Node("A",1987,70.2);
Node node2 = new Node("B", 2014, 66.4);
String key1 = "123";
String key2 = "345";
map.put(key1,node1);
map.put(key2,node2);
Set<String> keySet= map.keySet();
for(String x:keySet){
System.out.println(map.get(x));
}
System.out.println(map.get(key1).name);
}
}
上面的代码应该解释一下。
答案 1 :(得分:2)
在类Node中,覆盖将在打印节点时调用的toString函数,您可以选择打印的显示方式。
答案 2 :(得分:1)
for(String key : keySet){
Node n = map.get(key);
System.out.println(n.getYear());
}
答案 3 :(得分:1)
由于调用了nodeMap.get
方法,因此应使用entrySet
方法而不是keySet
。
以下是两种方法使用的一点比较:
// Create Map instance and populate it
Map<String, Node> nodeMap = new HashMap<String, Node>();
for (int i = 0; i < 100; i++) {
String tmp = Integer.toString(i);
nodeMap.put(tmp, new Node(tmp, 2015, 3.0));
}
// Test 1: keySet + get
long t1 = System.nanoTime();
for (String x : nodeMap.keySet()) {
nodeMap.get(x);
}
System.out.format("keySet + get: %d ns\n" , System.nanoTime() - t1);
// Test 2: entrySet + getValue
t1 = System.nanoTime();
for (Map.Entry<String, Node> e : nodeMap.entrySet()) {
e.getValue();
}
System.out.format("entrySet + getValue: %d ns\n" , System.nanoTime() - t1);
keySet + get: 384464 ns
entrySet + getValue: 118813 ns
我反复跑了这个测试。平均而言,entrySet + getValue
比keySet + get
两倍。