【问题标题】:HashMap One key with multiple values without knowing what values you getHashMap 一键多值,不知道你得到什么值
【发布时间】:2015-04-22 03:17:55
【问题描述】:

好的,我查找了一些关于我的问题的线程,但在他们使用的每个解决方案中(至少在大多数情况下)都类似于:

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

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

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

提前致谢

【问题讨论】:

  • 听起来你可能需要一个 Map 来跟踪关系。即字符串键到字符串值的映射
  • 听起来您想要一个Map&lt;String, List&lt;RelationAndValue&gt;&gt;,其中RelationAndValue 是您创建的用于保存关系和值的类。
  • 你也可以试试 Map>。其中第一个字符串是 STRING1,第二个是 RELATION,第三个是 STRING2。如果您有比 Map>>. 更多具有相同关系的字符串

标签: java object dictionary hashmap


【解决方案1】:

检查键是否已经在您的地图中,如果是,只需添加与此键的关系:

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

【讨论】:

  • 好的。我测试了这种方法,但遗憾的是我仍然没有得到所有的关系。它仍然只会打印出添加的最新关系。即使我遍历包含所有关系的列表也不起作用..有什么想法吗?编辑:甚至现在检查了在终端上打印列表字符串本身仍然只有一个保存
  • @NhatNienne 添加了打印方法。
  • 谢谢,但我对你的方法的问题仍然是第一种方法(不是打印方法)理论上应该有效,但它仍然没有在列表中添加所有关系。我不知道为什么,但它也覆盖了它们
  • 有什么方法可以私下给你吗?
【解决方案2】:

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

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

但是,如果由于某种原因您不能只导入一个,那么上述方法很好!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多