从Hashmap获取具有多个值的值之一

时间:2015-04-02 19:35:07

标签: java hashmap

如果我有如下的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键的年份值。

4 个答案:

答案 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 + getValuekeySet + get 两倍