处理HashMaps

时间:2016-06-23 17:46:51

标签: java

我有Hashmap<String , ArrayList<Double>>形式的填充哈希图。在许多情况下,值(Arraylist)是相同的。我想要做的是,如果值相同,则应将两个单独的条目更改为一个并更改密钥。例如:

HashMap<String, ArrayList<Double>> map = new HashMap<>();
ArrayList<Double> arr = new ArrayList<>();
arr.add(1);
arr.add(2)
map.put("a",arr);
map.put("b",arr);
map.put("c",arr);

这应该会产生一个带有单个条目的hashmap:

{a, b , c=[1,2]}

我试图解决这个问题几个小时但仍然无法解决这个问题。提前一百万谢谢。

2 个答案:

答案 0 :(得分:0)

地图将键与值相关联。因此,即使值相同,也无法组合这些条目,因为键是不同的

答案 1 :(得分:0)

通过覆盖HashMap来创建自定义put()应该有效,但在性能方面却不是很有效。

这样的事情:

public class CustomMap extends HashMap<String, ArrayList<Double>> {
    @Override
    public ArrayList<Double> put(String key, ArrayList<Double> value) {
        for (Entry<String, ArrayList<Double>> entry : entrySet()) {
            if (entry.getValue().equals(value)) {
                String oldKey = entry.getKey();
                remove(oldKey);
                String newKey = oldKey + ", " + key;
                return super.put(newKey, value);
            }
        }
        return super.put(key, value);
    }
}

要使用它,只需替换以下内容:

HashMap<String, ArrayList<Double>> map = new HashMap<>();

使用:

CustomMap map = new CustomMap();