HashMap <string,arraylist =“”>,使用基于Key的新值附加ArrayList </string,>

时间:2012-10-26 22:06:14

标签: java arraylist hashmap

我已经获得了一个测试驱动的开发问题(我需要根据提供的junit方法使其工作)基于实现HashMap,该HashMap使用键的字符串和值的ArrayLists。密钥需要能够支持一个或多个相应的值。我需要以我可以在哈希中添加或减去值的方式设置我的方法,然后查看哈希的更新内容。我的斗争是从下面显示的单位方法(行使myClass和它的添加方法)方法获取信息,并将其正确地放入哈希。

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,我可以让事情发挥作用。所以这是一个非常简单的addsMethod:

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

将获得一个字符串字符串hashmap,但当然如果我重用一个具有新键值对的键,原始键值会被踩到并消失。当涉及到动态地使用哈希映射和arraylists时,超过1:1键:值关系,我迷路了。

2 个答案:

答案 0 :(得分:3)

您需要的是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);
}

答案 1 :(得分:3)

听起来你需要MultiMap,这是由Google的伟大Guava libraries提供的:

  

类似于Map的集合,但可以将多个值与单个键相关联。如果您使用相同的键但不同的值调用put(K,V)两次,则multimap包含从键到两个值的映射。