我已经获得了一个测试驱动的开发问题(我需要根据提供的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键:值关系,我迷路了。
答案 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包含从键到两个值的映射。