2011-03-03 119 views
3

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

回答

13

是创建一个自定义Comparator,并用它来进行排序点的列表

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() { 
    } 
} 

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()); 
} 
}); 
+1

简直超级。非常感谢。 – Abdul 2015-09-03 06:04:18

5

Point类,你应该实现Comparable接口泛型类型<Point>和使用Collections.sort(java.util中包)用于分类List<Point>

假设:

class Point implements Comparable<Point>{ 
    int compareTo(Point other){ /* your logic */} 
} 

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

您应该让您的Point类实现Comparable接口或使用您自己的Comparator对象提供sort()方法,该对象告诉sort()如何排序对象。这里有很多例子。