使用java中的Line2D和hashmaps
我有一组N个点,我想找出一条直线上的最大点数
我用每对点创建了Line2D对象。显然,某些Line2D对象将具有相同的坡度和截距,以使点共线。现在我想创建一种哈希表来存储具有相同斜率和截距的行的计数器
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
# 1 楼答案
可以创建一个新类来保存坡度和截距值。它应该有一个equals方法和hashcode方法,允许在定义的参数epsilon值内进行等价,以允许函数浮点相等。然后你可以用它作为HashMap的键。该值将是Line2D或点对的ArrayList
# 2 楼答案
您可以使用
String key
并将每个坐标/点附加到字符串中,以便在放置同一坐标时,它不会将其放置到HashMap
中的单独位置示例: