1

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

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 的关系,并且哈希图是 1:1,我可以让它们工作。所以像这样一个非常简单的addingMethod:

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

将得到一个字符串字符串哈希图,但当然,如果我用一个新的键值对重用一个键,原来的键值就会被踩上并消失。但是,当涉及到动态处理哈希映射和数组列表时,并且超出了 1:1 的键:值关系,我迷失了方向。

4

2 回答 2

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);
}
于 2012-10-26T22:08:33.177 回答
3

听起来您需要一个MultiMap,这是由 Google 的 great 提供的Guava libraries

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

于 2012-10-26T22:08:39.113 回答