具有重复键的内存高效键值存储

时间:2017-07-29 16:44:37

标签: java hashmap

我需要这样的东西:

SomeMap someMap= new someArray;
someArray.put("color","red");
someArray.put("color","black");
someArray.put("brand","coca-cola")
someArray.put("brand","pepsi")

我不在乎订单是什么。 这些是我需要的方法:

放入键和值:

someArray.put("color","red");

按键获取:

someArray.get("color");

全部获取:

someArray.getAll();

全部删除:

someArray.removeAll();

我还需要能够复制结构:

someMap2 = someMap; (not shallow copy)

我该怎么做?

2 个答案:

答案 0 :(得分:4)

关于允许重复按键的部分'在你的问题让我思考你真正想要的是MultiMap,其中给定的键可以映射到多个值。 Google会在Guava图书馆中显示此内容 - 或者您可以使用Map实施List推出自己的版本。这是example

声明可能类似于:

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

答案 1 :(得分:0)

如果您希望在没有任何外部依赖关系的情况下使用此代码,则只需以下代码即可。

package com.accessbot;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MultiValueMap {

    private static final Map<String, List<String>> map = new HashMap<String, List<String>>();

    public static void main(String[] args) {
        put("color", "red");
        put("color", "black");
        put("brand", "coca-cola");
        put("brand", "pepsi");

        System.out.println(get("color"));
        System.out.println(get("brand"));
    }

    public static List<String> get(String key) {
        return map.get(key);
    }

    public static void put(String key, String value) {
        if (map.get(key) == null) {
            map.put(key, new ArrayList<>());
        }
        map.get(key).add(value);
    }

}