2

我有这个对象:

Map<Long, Set<String>> resourcesByID = new HashMap<Long, Set<String>>();

另一个:

Set<String> resources;

当我想将更多 Set 放入 HashMap 时,它将覆盖我之前放入的 Set 元素。为什么?我该如何解决这个问题?

4

3 回答 3

2

假设

Long id = 1234L;
Set<String> resources = ...;

如果要添加从 aLong到 a 的另一个映射,Set

resourcesById.put(id, resources);

如果您想将Strings 添加到现有映射中

resourcesById.get(id).addAll(resources);

如果您没有正确进行初始化,为了让生活更简单......

if (!resourcesById.containsKey(id)) {
    resourcesById.put(id, new HashSet<String>());
}
resourcesById.get(id).addAll(resources);
于 2012-10-09T15:20:39.043 回答
2
  • 第一个原因,您可能对每组使用相同的密钥。
  • 第二个原因,如果键与每个键(长)不同,您可能使用资源引用使用相同的 Set,您必须为每个键创建单独的 Set 实例。
于 2012-10-09T15:20:43.233 回答
0

如果key匹配,它将覆盖以前的值,否则它不会覆盖。

(或者)

正如 Thomas 评论的那样,如果您的集合是 mutate 并且您正在更新同一个集合,是的,那么它可能会覆盖。

于 2012-10-09T15:17:27.563 回答