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;
}
}
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;
}
}
public int compare(Point a,Point b)
重載會出問題的
// 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 ;
}}
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;
}
}