HashMap具有多个值的一个键,不知道您获得的值

时间:2015-02-20 12:30:26

标签: java object dictionary hashmap

好的,我查找了一些关于我的问题的线索,但是在他们使用的每个解决方案中(至少是最重要的):

Map<Key, ArrayList<Value>> myMap = new HashMap...;
//this Map is an attribute of my first Object so the Key is the second 
  Object and my ArrayList is the relation

输入如:String1 (nr=2) relation String2 所以在我的情况下,我将获得一些名称和数字来创建一个对象(已经完成)。中间的关系字符串告诉我这些对象应该是哪个关系,但也可能Object of String1String2 Object有关,但也与另一个String3 Object有关。所以我现在的问题是,如果我从我的文件中读取输入,它将覆盖第一个关系。

但是如果我使用ArrayList的方法,我必须知道存在哪种关系。因为在我的输入文件中会有类似的内容:

String1 relation String2
String3 relation String5
String1 relation String4

所以我也不能只在地图中添加关系和第二个对象。

希望你理解我的问题。 (不是母语人士)

提前致谢

2 个答案:

答案 0 :(得分:0)

检查地图中是否已存在密钥,如果是,只需添加与此密钥的关系:

if map.containsKey(key)
{
   map.get(key).add(relation);
} else
{
   List<Object> rel = new ArrayList<Object>();
   rel.add(relation);
   map.put(key, rel);
}

更新:进行打印,请使用:

for (Map.Entry<String, List<Object>> entry : map.entrySet())
        {
            String key = entry.getKey();
            List<Object> values = entry.getValue();
            for (Object value : values)
            {
                System.out.println(key + "=" + value);
            }
        }

答案 1 :(得分:0)

如果没有什么能阻止你,那么我会考虑使用已经编写过的多地图实现。你需要这样的东西

http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Multimap.html

但是如果由于某种原因你不能只导入一个,那么上面的方法就好了!