2个属性的映射

Mapping of 2 attributes

我有一个包含 2 个属性的列表,即实体和应用程序。多个实体可以是一个应用程序的一部分。现在,我想将具有相同应用程序的所有实体映射到一个应用程序列表。为此,我声明 HashMap <String, List <String>>

在遍历实体列表时,我希望将它们一一添加到应用程序列表中。 在 c++ 中,我可以使用一个映射,其中 m[appName] 会给出 link 列表 header 并使用它我可以添加到现有列表中。在 hashmap 中,我需要输入 (key, value) 对,但是如何添加到应用程序的现有实体列表中?

据我了解应该是这样

public class MapAdder {
    private Map<String, Set<String>> app2entryMap = new HashMap<>();

    ...

    public boolean addMapping(final String app, final String entry) {
        Set<String> entries = app2entryMap.get(app);

        if (entries == null) {
            entries = new HashSet<String>();
            app2entryMap.put(app, entries);
        }

        return entries.add(entry);
    }
}

请注意,我使用 Set 而不是 List 来强制应用程序中条目的唯一性。如果不是您的 case/you,则不需要它 - List 很好,而且可能工作得更快。

另请注意,放置在 HashSet 中的真实对象应该有正确的 hashCode()/equals() 实现。请参阅 http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode()

事实证明,我使用了 Hashmap 的 get 方法来达到我的目的。我是这样使用的:

m.get(key).add(value)

'key' 中只有 appName 和值是实体 ID。唯一需要注意的是,对于第一次插入,我必须进行空值检查,如果我发现 'get' 返回空值,我会创建一个自己的列表并将其插入。