在java中使用Line2D和hashmaps

时间:2014-09-03 03:04:47

标签: java hashmap

我有一组N个点,我想找到一行中的最大点数。

我用每对点创建了Line2D对象。显然,一些Line2D对象将具有相同的斜率和截距以使这些点共线。现在我想创建一种Hashtable来存储具有相同斜率和截距的线的计数器。

        int x1 = 1;
        int y1 = 1;
        int x2 = 2;
        int y2 = 2;
        int x3 = 3;
        int y3 = 3;


        Line2D line1 = new Line2D.Double(x1, y1, x2, y2);
        Line2D line2 = new Line2D.Double(x2, y2, x3, y3);


        hashMap.put(line1, 1);

显然,如果我将line2放在hashMap中,它将会转到另一个。我怎么能这样做,因为两条线都相同,计数增加1?

2 个答案:

答案 0 :(得分:0)

您可以使用String key并将每个坐标/点附加到字符串,这样当您放置相同的坐标时,它就不会将其放在HashMap中的单独位置。

<强>样品:

Line2D line1 = new Line2D.Double(x1, y1, x2, y2);
HashMap<String, Integer> hashMap = new HashMap<>();
String keyToGetOrPut = line1.getP1().getX() + "" + line1.getP1().getY() + "" + line1.getP2().getX() + "" + line1.getP2().getY();
if(hashMap.get(keyToGetOrPut) != null){
    hashMap.put(keyToGetOrPut, hashMap.get(keyToGet)+1); //increment by 1 if points is already in the HashMap
} else {
    hashMap.put(keyToGetOrPut, 1); //put a new record to the HashMap
}

答案 1 :(得分:0)

您可以创建一个包含斜率和截距值的新类。它应该有一个equals方法和hashcode方法,允许在定义的参数epsilon值内等效,以允许功能浮点相等。然后你可以使用它作为HashMap的关键。 Value将是Line2D或Points对的ArrayList。