如何在java中对对象进行排序

时间:2016-06-13 15:07:11

标签: java

我有一个类“Segment”,我通过它获得2个数组的值。 我的主要方法是

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        Segment[] segments = new Segment[n];
        for (int i = 0; i < n; i++) {
            int start, end;
            start = scanner.nextInt();
            end = scanner.nextInt();
            segments[i] = new Segment(start, end);
        }
}

Segment类如下所示。

 private static class Segment  {

        int start, end;

        Segment() {
        }

        Segment(int start, int end) {
            this.start = start;
            this.end = end;
        }
}

现在,如何根据终点对细分进行排序。

3 个答案:

答案 0 :(得分:2)

要进行排序,请使用Arrays.sort并实施Comparator

Arrays.sort(segments, new Comparator<Segment>() {
    @Override
    public int compare(Segment o1, Segment o2) {
        return Integer.compare(o1.getEnd(), o2.getEnd());
    }
});

答案 1 :(得分:1)

你可以让Segment实现Comparable:

private static class Segment implements Comparable<Segment> {
    int start, end;
    Segment() {
    }
    Segment(int start, int end) {
        this.start = start;
        this.end = end;
    }
    @Override
    public int compareTo(Segment otherSegment) {
        int result = 0;
        if (start != otherSegment.start) {
            result = start < otherSegment.start ? -1 : 1;
        }
        return result;
    }
    @Override
    public String toString() {
        return "Segment [start=" + start + ", end=" + end + "]";
    }
}

我将您的数组更改为List,并使用Collections进行排序:

Collections.sort(segments);

您修改过的代码:

    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    List<Segment> segments = new ArrayList<Segment>();
    for (int i = 0; i < n; i++) {
        int start, end;
        start = scanner.nextInt();
        end = scanner.nextInt();
        segments.add(new Segment(start, end));
    }

    Collections.sort(segments);
    System.out.println(segments);

compareTo 方法中插入排序逻辑。这类似于使用 Comparator ,区别在于您是希望排序逻辑位于Segment还是实用程序类中。

答案 2 :(得分:0)

你必须让Segement类实现Comparable接口并覆盖compareTo()方法然后使用:     Segements.sort()//对其进行排序。