为什么 containsKey 方法不能按预期工作?
Why won't the containsKey method work as expected?
我正在尝试将位置列表中的所有唯一坐标添加到一个 HashMap 中,该 HashMap 以坐标为键,计数为值。关键是由'$'符号连接的经纬度。
//String = coordinates concatinated with '$', Integer = coordinate occurrence count
private HashMap<String, Integer> coordMap = new HashMap<String, Integer>();
...
public void addCoords(double longitude, double latitude) {
//The total count of the state
stateCount++;
String coordsConcat = longitude + "$" + latitude;
//Here we're removing the entry of the existing coord, then re-adding it incremented by one.
if (coordMap.containsKey(coordsConcat)) {
Integer tempCount = coordMap.get(coordsConcat);
tempCount = tempCount + 1;
coordMap.remove(coordsConcat);
coordMap.put(coordsConcat, tempCount);
} else {
coordMap.put(coordsConcat, 1);
}
}
我遇到的问题是 containsKey 总是 return 错误,即使通过测试我输入了两个相同的经度和纬度坐标。
编辑:我试了 addCords(0,0);
5 次,HashMap 仍然是空的。
编辑 2:double 值只到千位。
测试用例:
GeoState test = new GeoState("MA");
test.addCoords(0,0);
test.addCoords(0,0);
test.addCoords(0,0);
test.addCoords(0,0);
System.out.println(test.getRegionCoords());
这将 return {}
谢谢
这很可能是精度问题。您可能希望在将 coordsConcat 的值放入 HashMap 之前、将其放入 HashMap 之后以及检查 containsKey 之前检查它们的值。
很可能是值之间存在一些次要(或主要)不匹配导致此问题。
我正在尝试将位置列表中的所有唯一坐标添加到一个 HashMap 中,该 HashMap 以坐标为键,计数为值。关键是由'$'符号连接的经纬度。
//String = coordinates concatinated with '$', Integer = coordinate occurrence count
private HashMap<String, Integer> coordMap = new HashMap<String, Integer>();
...
public void addCoords(double longitude, double latitude) {
//The total count of the state
stateCount++;
String coordsConcat = longitude + "$" + latitude;
//Here we're removing the entry of the existing coord, then re-adding it incremented by one.
if (coordMap.containsKey(coordsConcat)) {
Integer tempCount = coordMap.get(coordsConcat);
tempCount = tempCount + 1;
coordMap.remove(coordsConcat);
coordMap.put(coordsConcat, tempCount);
} else {
coordMap.put(coordsConcat, 1);
}
}
我遇到的问题是 containsKey 总是 return 错误,即使通过测试我输入了两个相同的经度和纬度坐标。
编辑:我试了 addCords(0,0);
5 次,HashMap 仍然是空的。
编辑 2:double 值只到千位。
测试用例:
GeoState test = new GeoState("MA");
test.addCoords(0,0);
test.addCoords(0,0);
test.addCoords(0,0);
test.addCoords(0,0);
System.out.println(test.getRegionCoords());
这将 return {}
谢谢
这很可能是精度问题。您可能希望在将 coordsConcat 的值放入 HashMap 之前、将其放入 HashMap 之后以及检查 containsKey 之前检查它们的值。
很可能是值之间存在一些次要(或主要)不匹配导致此问题。