为什么containsKey方法不能按预期工作?

时间:2015-10-18 01:49:56

标签: java hashmap contains 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总是返回false,即使通过测试我输入了两个相同的经度和纬度坐标。

编辑:我尝试了addCords(0,0); 5次,而HashMap仍然是空的。

编辑2:双重值仅限于千分之一。

测试用例:

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());

这将返回{} 感谢

1 个答案:

答案 0 :(得分:1)

这很可能是一个精确的问题。在将coordsConcat放入HashMap之后,在将它们放入HashMap之后,在检查containsKey之前,可能需要检查coordsConcat的值。

可能导致此问题的值之间存在一些轻微(或主要)不匹配的可能性。