Java不会对抽象类的arraylist进行排序

时间:2018-06-04 21:12:21

标签: java arrays sorting object

我有一个问题。我写了简单的抽象类,我尝试排序该类的数组列表,我为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类。

2 个答案:

答案 0 :(得分:0)

引自Collections.sort(List<T>)

  

按照升序对指定列表按升序排序    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)