我有一个类“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;
}
}
现在,如何根据终点对细分进行排序。
答案 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()//对其进行排序。