我有一个问题。我写了简单的抽象类,我尝试排序该类的数组列表,我为compareTo函数实现了Comparator接口,但List.sort给出了一个错误。请帮助。这是一个代码:
public abstract class Antena implements Comparator<Antena>{
private double x, y;
public Antena(double x, double y) {
this.x = x;
this.y = y;
}
public double getX() {
return x;
}
public double getY() {
return y;
}
@Override
public int compare(Antena o1, Antena o2) {
return (int)(o1.getX()-o2.getX());
}
}
在主要课程中我有:
List<Antena> anteneObj=new ArrayList<>();
anteneObj.add(.....);
....
....
Collections.sort(anteneObj);
这给了我一个错误,不会排序列表。什么是问题?我应该在扩展类中扩展或实现一些东西。当然我有2个类扩展了抽象的Antena类。
答案 0 :(得分:0)
按照升序对指定列表按升序排序
Comparable
其元素的自然排序。 列表中的所有元素都必须实现Comparable
接口。
因此,为了按Collections.sort(List<T>)
排序
您的班级Antena
应该实现接口Comparable<Antena>
而不是Comparator<Antena>
:
public abstract class Antena implements Comparable<Antena> {
....
@Override
public int compareTo(Antena o) {
return Double.compare(this.getX(), o.getX());
}
}
答案 1 :(得分:-1)
compare
方法应返回-1或0或1.您的实现可能返回错误的值。实现Comparable并返回Double.compare(double, double)
。