Реализация точек в линии стреловидности - PullRequest
0 голосов
/ 24 января 2020

В алгоритмах строчной линии я использую массив, который сортирует точки по их x-координатам, и TreeSet, который сортирует точки по их y-координатам. В настоящее время я использовал два точечных класса, чтобы указать, какой компаратор использовать (т. Е. Сравнивать ли x-координату или y-координату). Возможно ли это с одним классом точек, но двумя функциями сравнения? Для иллюстрации вот что у меня есть. Извиняюсь за непрофессиональную терминологию.

   public static class Point implements Comparable<Point>{
    int x; int y;
    public Point(int a, int b){
        this.x=a; this.y=b;
    }
    public int compareTo(Point other){
        if(this.x<other.x)return -1;
        if(this.x>other.x)return 1;
        if(this.y>other.y)return 1;
        return -1;
    }
}
public static class Point2 implements Comparable<Point2>{
    int x; int y;
    public Point2(int a, int b){
        this.x=a; this.y=b;
    }
    public int compareTo(Point2 other){
        if(this.y<other.y)return -1;
        if(this.y>other.y)return 1;
        if(this.x>other.x)return 1;
        return -1;
    }
}

1 Ответ

0 голосов
/ 24 января 2020

Оба массива и TreeSet s позволяют сортировать на основе пользовательских Comparator s:

new TreeSet<>(new Comparator<T>() {
        @Override
        public int compare(T t1, T t2) {
            // your implementation here
        }
    });

Arrays.sort(arr, new Comparator<T>() {
        @Override
        public int compare(T t1, T t2) {
            // your implementation here
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...