Java 重复值-映射

Java 重复值-映射,java,Java,我有两个Map和Map2,其中的值不断增加。 我需要通过比较Map中的所有值来检查是否在Map2中添加了重复值。我写了一个简单的函数,但它总是给出false 只回答你的特定问题,而不是纠正你的全部逻辑。我想说的是,由于变量存在在循环内,并且您在循环后打印它,因此变量值被覆盖 for(String id: ids){ System.out.println("ids: " + id); exists = ids.contains(value1); // exists is assig

我有两个Map和Map2,其中的值不断增加。 我需要通过比较Map中的所有值来检查是否在Map2中添加了重复值。我写了一个简单的函数,但它总是给出false 只回答你的特定问题,而不是纠正你的全部逻辑。我想说的是,由于变量
存在
在循环内,并且您在循环后打印它,因此变量值被覆盖

for(String id: ids){
    System.out.println("ids: " + id);
    exists = ids.contains(value1); // exists is assigned a new value each time here
}
System.out.println("Value exist?" + exists);
我想一旦你的
存在
真的
,你就需要打破这个循环


您可以使用更简单的API方法,如。

如果只需要查找映射中是否存在此特定值,则可以在找到该值后中断循环

这样,变量在中断后仍将设置为true,如果没有中断循环,则将设置为false

for(String id: ids){
  System.out.println("ids: " + id);
  exists = ids.contains(value1);
  if(exists) {
      break;
  }
}

System.out.println("Value exist?" + exists);

你让你的生活复杂化了

方法;)

现在,你应该更准确地回答你真正的问题。你说的是一个值还是一个映射条目

如果是值,只需使用
.containsValue()
。如果是完整条目,则简单如下:

// Supposes values CAN NOT BE NULL
map2.containsKey(theKey) && map2.get(theKey).equals(theValue)
另一个解决方案,虽然有点复杂,但如果你的地图真的很大,它会有所帮助,那就是将地图修改包装在一个方法中,除了将值存储在地图中之外,你还可以将值记录在一个
HashSet
中;然后,您可以检查值集
。是否包含()要添加的值。

为什么不使用:

int mapSize = map.values().size();
ArrayList<String> mapValues = new ArrayList<String>( map.values() );
mapValues.removeAll( map1.values() );
System.out.println( "Value exists? " + ( mapSize != mapValues.size() ) );
int-mapSize=map.values().size();
ArrayList mapValues=新的ArrayList(map.values());
removeAll(map1.values());
System.out.println(“值存在?”+(mapSize!=mapValues.size());

刚刚学到了一些新知识,如果op在检查后需要此映射中的数据怎么办?你是说并发吗<代码>映射值
只是一个一次性列表。它没有从
映射中删除值。啊,好吧,很抱歉读错了,以为你修改了映射。但是仍然需要做很多努力来避免
contains()
;)
int mapSize = map.values().size();
ArrayList<String> mapValues = new ArrayList<String>( map.values() );
mapValues.removeAll( map1.values() );
System.out.println( "Value exists? " + ( mapSize != mapValues.size() ) );