问题
因为map.keySet()与map真实的key是镜像映射关系,所以修改map.keySet()中的值会直接改变map内部的key值。
比如,删除keySet{147, 148, 133, 150, 137, 140}中的140,map结果会变成{147=40.525, 148=2.907, 133=37.256, 150=448.946, 137=10.48}。
这对于频繁遍历修改一个map,或是取交差集时。就不能使用map.keySet()。
解决方法
创建新对象(克隆)
Set<Integer> goodsSet = new HashSet<>(userGoods.keySet());