HashSet重复标准 重复判断的问题


题:
有如下类型,代表某应用中的点类型
class MyPoint
{
private int x; //横坐标 例如:15
private int y; //纵坐标 例如:22
private String color; //点的颜色,例如:red

...
}
需要把这种类型的对象加入到 HashSet中去,请解决重复判断的问题。
判定要求: 颜色形同,坐标点距离不超过2,则认为是同一个点对象(可以想象因为测量误差,允许坐标有小的飘动)

源码HashSetRepeat.java


import java.util.HashSet;
import java.util.Set;

class Point {
    private int x;
    private int y;
    private String color;
    public Point(int x, int y, String c) {
        this.x = x;
        this.y = y;
        this.color = c;
    }
    public boolean equals(Object o) {
        if (o instanceof Point == false) {
            return false;
        }
        Point p = (Point) o;
        double d = Math.sqrt(Math.pow((this.x-p.x), 2)+Math.pow((this.y-p.y),2));
        if (d<=2 && this.color.equals(p.color)) {
            return true;
        }
        else {
            return false;
        }
    }
    public int hashCode() {
        return 1;
    }
    public String toString() {
        return "("+x+","+y+","+color+")";
    }
}

public class HashSetRepeat {
    public static void main(String[] args) {
        Set<Point> s = new HashSet<Point>();
        s.add(new Point(10, 10, "red"));
        s.add(new Point(10, 12, "red"));
        s.add(new Point(10, 12, "orange"));
        s.add(new Point(20, 20, "orange"));
        System.out.println(s);
    }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注