我有一组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?
答案 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。