使用可比接口对通用链接列表进行排序

时间:2019-03-19 09:06:49

标签: java generics linked-list comparable

我想使用Java的Comparable Interface对自己实现的链接列表进行排序。我需要实现compareTo方法: 这是我的类ListElement的代码:

 public class ListElement implements Comparable<ListElement> {
    public Object wert;
    public ListElement nachFolger;

    public ListElement(Object wert , ListElement nachFolger) {
        this.wert=wert;
        this.nachFolger=nachFolger;
    }

    @Override
    public int compareTo(ListElement a) {
        if(this.nachFolger.wert - a.wert) {
            return 1;
        }
        return 0;
    }
}

但是我得到一个错误,有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您正在尝试减去类型为Object的引用。

您的元素类型应实现Comparable

public class ListElement<T extends Comparable<T>> implements Comparable<ListElement<T>> {
    public T wert;
    public ListElement<T> nachFolger;

    public ListElement(T wert, ListElement<T> nachFolger) {
        this.wert=wert;
        this.nachFolger=nachFolger;
    }

    @Override
    public int compareTo(ListElement<T> a) {
        return wert.compareTo(a.wert);
    }
}

答案 1 :(得分:0)

在Java中,减法运算仅适用于数字文字(和自动取消装箱的数字对象)。当您尝试在非数字Object类型上使用它时,会遇到错误。如果要比较两个wert值,可以执行以下操作:

  • 将类型从number更改为Object,以便进行比较,例如:

    public Object wert;
    
    @Override
    public int compareTo(ListElement a) {
        return wert.compareTo(a.wert);
    }
    
  • 将类型更改为Comparable,以便可以在两个compareTo对象上使用wert

    public Comparable wert;
    
    @Override
    public int compareTo(ListElement a) {
        return wert.compareTo(a.wert);
    }