Java集<;字符串>;在哈希映射中

Java集<;字符串>;在哈希映射中,java,hashmap,set,Java,Hashmap,Set,我有一个目标: Map<Long, Set<String>> resourcesByID = new HashMap<Long, Set<String>>(); Map resourcesbyd=newhashmap(); 还有一个: Set<String> resources; 设置资源; 当我想在HashMap中放入更多的集合时,它将覆盖我之前放入的集合元素。为什么?我该如何解决这个问题 如果键匹配,它将覆盖以前的值,否则不

我有一个目标:

Map<Long, Set<String>> resourcesByID = new HashMap<Long, Set<String>>();
Map resourcesbyd=newhashmap();
还有一个:

Set<String> resources;
设置资源;

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

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

(或)


正如Thomas所评论的,如果您的集合发生了变异,并且您正在更新相同的集合,那么它可能会覆盖。

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

(或)

正如Thomas所评论的,如果您的集合发生了变异,并且您正在更新相同的集合,那么它可能会覆盖。

Long id = 1234L;
Set<String> resources = ...;
如果要将
String
s添加到现有映射

resourcesById.get(id).addAll(resources);
如果你没有正确的初始化,生活会变得更简单

if (!resourcesById.containsKey(id)) {
    resourcesById.put(id, new HashSet<String>());
}
resourcesById.get(id).addAll(resources);
if(!resourcesById.containsKey(id)){
resourcesById.put(id,newhashset());
}
resourcesbyd.get(id).addAll(resources);
假设

Long id = 1234L;
Set<String> resources = ...;
如果要将
String
s添加到现有映射

resourcesById.get(id).addAll(resources);
如果你没有正确的初始化,生活会变得更简单

if (!resourcesById.containsKey(id)) {
    resourcesById.put(id, new HashSet<String>());
}
resourcesById.get(id).addAll(resources);
if(!resourcesById.containsKey(id)){
resourcesById.put(id,newhashset());
}
resourcesbyd.get(id).addAll(resources);
  • 第一个原因是您可能对每个集合使用相同的键
  • 第二个原因是,如果每个键(长键)的键不同,则可能使用相同的集 使用参考资料参考,您必须创建单独的 为每个键设置的实例
      • 第一个原因是您可能对每个集合使用相同的键
      • 第二个原因是,如果每个键(长键)的键不同,则可能使用相同的集 使用参考资料参考,您必须创建单独的 为每个键设置的实例

      您能举例说明在什么情况下会发生这种情况吗?如何将集合放入HashMap?您应该在使用
      resourcesById
      的地方发布代码。很可能您只是在HashMap中添加了一个新的集合。您应该做的是检查HashMap是否包含要用于插入的Long。如果是,则必须从贴图中获取集合,并将插入集合中的所有元素添加到其中。如果没有,只需插入插入集。很可能您没有为每个新键创建新的
      集,相反,您不断地将新元素推入相同的
      资源
      对象,然后将所述
      资源
      对象的不同键的多个引用放入hashmap。您能给出一个例子吗?如何将集合放入HashMap?您应该在使用
      resourcesById
      的地方发布代码。很可能您只是在HashMap中添加了一个新的集合。您应该做的是检查HashMap是否包含要用于插入的Long。如果是,则必须从贴图中获取集合,并将插入集合中的所有元素添加到其中。如果没有,只需插入插入集。很可能您没有为每个新键创建一个新的
      ,而是不断地将新元素推送到同一
      资源
      对象中,然后将所述
      资源
      对象的多个引用(针对不同键)放入hashmap。或者更糟,如果您从外部对已插入的集合进行变异。@user1732178:键不同,但您正在更新同一集合?这是我的问题:当我将不同的元素放入HashMap时,我使用了相同的集合引用,因此它会更改HashMap中的所有集合。但现在它起作用了。谢谢。那个变异的评论有帮助;)@用户1732178:不客气。如果答案有帮助,请不要忘记接受它。或者更糟糕的是,如果您从外部对已插入的集合进行变异。@user1732178:键不同,但您正在更新同一集合?这是我的问题:当我将不同的元素放入HashMap时,我使用了相同的集合引用,因此它会更改HashMap中的所有集合。但现在它起作用了。谢谢。那个变异的评论有帮助;)@用户1732178:不客气。如果答案有用,别忘了接受它。