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