使用重复键创建类似键值对的集合?

时间:2015-02-21 05:26:49

标签: java

考虑为,

HashMap<Integer, String> map = new HashMap<Integer, String>();

我想要商店,

map.put(1, "Val-1");
map.put(2, "Val-2");
map.put(1, "Val-3");
map.put(1, "Val-4");
map.put(3, "Val-5");
.
.
. it goes like this

当我给它时,它应该给出与键相关的所有值。我该怎么解决呢如果您知道其他可能性,请告诉我

,不是一个HashMap

2 个答案:

答案 0 :(得分:6)

您可以使用HashMap<Integer,List<String>>

您可以将列表中共享相同键的所有值分组。

HashMap<Integer,List<String>> map = new HashMap<>();
List<String> l = new ArrayList<>();
l.add("Val-1");
l.add("Val-3");
l.add("Val-4");
map.put(1, l);
l = new ArrayList<>();
l.add("Val-2");
map.put(2, l);
l = new ArrayList<>();
l.add("Val-5");
map.put(3, l);

答案 1 :(得分:0)

在Java中,Map不允许重复键。因此,要关联多个值,您需要为每个键分配一个List。另外,请注意我在参考端使用接口类型的方式。

Map<Integer, List<String>> map = new HashMap<Integer, List<String>>();

现在您只需要创建自己的put()版本添加,而不是<{1}}。

List

以下是添加和显示多个值的方法

public void add(Integer key, String val) {
    List<String> list = map.get(key);
    if (list == null) {
        list = new ArrayList<String>();
        map.put(key, list);
    }
    list.add(val);
}

输出:

add(1, "one");
add(2, "two");
add(2, "three");

for(Map.Entry<Integer, List<String>> entry: map.entrySet()) {
    System.out.println(entry.getKey() + " = " + entry.getValue());
}