2012-10-26 42 views
1

基于实现HashMap,我得到了一个测试驱动的开发问题(我需要使它基于提供的junit方法工作)使用键的字符串和ArrayLists的值。关键需要能够支持一个或多个相应的值。我需要设置我的方法,以便可以从散列中增加或减少值,然后查看散列的更新内容。我的努力是从下面显示的单元方法(执行myClass和它的addingMethod方法)中获取信息并将它正确地放入哈希中。HashMap <String,ArrayList>,使用基于密钥的新值追加ArrayList

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); 

会得到一串字符串HashMap的,当然,如果我再与新的键值对的键,原来的键值就会被踩踏而消失。当谈到动态处理hashmaps和arraylists时,除了1:1的关键:价值关系之外,我迷了路。

回答

3

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

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

+1

为什么人们不断链接到番石榴版本3的文档?我们现在13岁了。 –

+0

@LouisWasserman:因为他们是第一个用google搜索例如'Java Guava Multimap'的命中,所以很容易错过。 – Keppil

+0

让我说,作为一名java总新手,这是一个很棒的发现(尽管肯定会给所有的兽医一个给定的)。非常感谢你,我只是保存了几行代码而且很头痛。虽然我想弄清楚实现它的'其他'方法,以加强我的Java基础。 – Benny

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); 
} 
+0

这太棒了,但是如何打印呢? –

相关问题