使用Java对点列表进行排序

Sorting a list of points with Java

本问题已经有最佳答案,请猛点这里访问。

我有一个点对象列表,我想按某个坐标排序,比如x值。Java是否提供了任何有用的机制,或者我应该使用一种常见的排序算法吗?


是,创建自定义Comparator,并使用它对点列表进行排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Point{
    private int x;
    private int y;

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public Point() {
    }
}
1
2
3
4
5
6
7
8
9
10
List<Point> points = new ArrayList<Point>();
points.add(new Point(1, 2));
points.add(new Point(60, 50));
points.add(new Point(50, 3));
Collections.sort(points,new Comparator<Point>() {

public int compare(Point o1, Point o2) {
    return Integer.compare(o1.getX(), o2.getX());
}
});


Point类中,您应该实现与泛型类型类似的接口,并使用Collections.sort(java.util包)对List进行排序。

假设:

1
2
3
4
5
6
7
class Point implements Comparable<Point>{
    int compareTo(Point other){ /* your logic */}
}

List<Point> list = new ArrayList<Point>();
/* adding points */
Collections.sort(list);


您可以使用bean比较器之类的工具,这样就不必一直创建自定义比较器。


您应该让您的点类实现可比较的接口,或者为sort()方法提供您自己的comparator对象,它告诉sort()如何排序对象。这里有很多例子。