public static void main(String[] args) {
ArrayList<Point> l=new ArrayList<Point>();
Point p1=new Point(64,91);
Point p2=new Point(78,163);
Point p3=new Point(270,135);
Point p4=new Point(390,180);
Point p5=new Point(390,120);
l.add(p5);
l.add(p4);
l.add(p3);
l.add(p1);
l.add(p2);

for(int i=0;i<l.size();i++){
System.out.print(l.get(i).x);
System.out.print(" ");
System.out.println(l.get(i).y);
}
System.out.println("=================");

Collections.sort(l,new myComparator());

for(int i=0;i<l.size();i++){
System.out.print(l.get(i).x);
System.out.print(" ");
System.out.println(l.get(i).y);
}
}
======================================================
public class myComparator implements Comparator { public int compare(Point a,Point b) {
int x1=a.x;
int x2=b.x;
int y1=a.y;
int y2=b.y;
if(x1<x2)
return -1;
else 
return 1;
} public int compare(Object arg0, Object arg1) {
// TODO Auto-generated method stub
return 0;
}
}

解决方案 »

  1.   

    public int compare(Object arg0, Object arg1)
    public int compare(Point a,Point b)
    重載會出問題的
      

  2.   

    public int compare(Object arg0, Object arg1) {
    // TODO Auto-generated method stub
    return 0;
    }这就是比较的关键代码所在,但你却让它返回0 也就是相等,当然就无法排序了.
    比如你的怕需是根据一个点离原点距离排序那么可以写成:
    假设Point.x 表示横坐标 Point.y表示纵坐标
    public int compare(Object arg0, Object arg1) {
      
      double fst = Math.pow((Point)arg0).x,2)+ Math.pow((Point)arg0).y,2)
        double sec = Math.pow((Point)arg1).x,2)+ Math.pow((Point)arg1).y,2)
        if (fst < sec ){
           eturn -1 ;
        }else if(fst = sec){
           return 0 ;
        }else{
           return 1 ;
        }}
      

  3.   

    晕,没看到上面的public int compare(Point a,Point b) ,你写成这样是无效的.
      

  4.   

    public class myComparator implements Comparator {public int compare(Object o1,Object o2) {
    Point a, b;
    if(o1 instanceof Point){
       a = (Point) o1;
    } else {
       return -1;
    }
    if(o2 instanceof Point){
       b = (Point) o2;
    } else {
       return -1;
    }
    int x1=a.x;
    int x2=b.x;
    int y1=a.y;
    int y2=b.y;
    if(x1<x2)
    return -1;
    else 
    return 1;
    }
    }