HashMap中 ,用新值追加ArrayList的基础上,重点(HashMap

2019-09-28 05:10发布

我已经被赋予了测试驱动开发的问题(我需要它的基础上提供了JUnit方法的工作)的基础上实现使用的密钥和用于的ArrayList值的字符串一个HashMap。 关键需要能够支持一个或多个对应的值。 我需要设置我的方法,我可以添加或哈希值中减去,然后看到散列的更新内容的方式。 我的斗争正在从以下所示的单元方法提供的信息(行使myClass的和它的addingMethod方法)方法),并得到它把正常到哈希值。

void add() {
    myClass = new MyClass("key1", "value1");
    myClass.addingMethod("blargh", "blarghvalue");
    myClass.addingMethod("blargh2", "uglystring");
    myClass.addingMethod("blargh", "anotherstring");
    //and so on and so on............

对于我的最终结果是,当我打印出来myClass的结果,我需要看到类似:{blargh = [blarghvalue,anotherstring],blargh2 = uglystring}

我需要能够加入到这一点,并删除值也是如此。

我很新的Java集合(明显)。 我能得到的东西,如果他们只有一个1对1的关系工作,HashMap的是1:1。 因此,一个很简单的addingMethod是这样的:

public void addingMethod(String key, String value) {
    hashMap.put(key, value);

将得到的字符串字符串HashMap的,当然,如果我再与新的键值对,原来的键值就会被踩踏而消失的关键。 当谈到与包含HashMap和工作的ArrayList动态不过,和超过1:1键:值的关系,我迷路了。

Answer 1:

这听起来像你需要一个MultiMap ,这是谷歌的伟大提供Guava libraries

类似地图的集合,但可与单个键多个值相关联。 如果你打电话把(K,V)的两倍,使用相同的密钥,但不同的价值观,multimap中包含的关键,这两个值映射。



Answer 2:

你需要的是Map<String, List<String>> ,并把检查里面是否存在条目,如果是,那么添加到列表。

声明你的地图如下图所示

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

需要注意的是语法adding Method应该是一样的put

public List<String> put(String key, String value) {
    if (!map.containsKey(key)) {
        return map.put(key, new ArrayList<String>());
    }
    List<String> list = map.get(key);
    list.add(value);
    return map.put(key, list);
}


文章来源: HashMap, Appending ArrayList with new values based on the Key