Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用可比较界面对通用链表进行排序_Java_Generics_Linked List_Comparable - Fatal编程技术网

Java 使用可比较界面对通用链表进行排序

Java 使用可比较界面对通用链表进行排序,java,generics,linked-list,comparable,Java,Generics,Linked List,Comparable,我想使用Java的Compariable接口对我自己实现的链表进行排序。我需要实现Comparieto方法: 以下是我的类ListElement的代码: public class ListElement implements Comparable<ListElement> { public Object wert; public ListElement nachFolger; public ListElement(Object wert , ListEle

我想使用Java的Compariable接口对我自己实现的链表进行排序。我需要实现Comparieto方法: 以下是我的类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;
    }
}
公共类ListElement实现了可比较的{
公共对象wert;
nachFolger公共列表;
公共ListElement(对象wert、ListElement nachFolger){
这个。wert=wert;
这个.nachFolger=nachFolger;
}
@凌驾
公共整数比较(列表元素a){
如果(this.nachFolger.wert-a.wert){
返回1;
}
返回0;
}
}

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

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

您的元素类型应实现
可比性

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);
    }
}
公共类ListElement实现了可比较的{
公共卫生服务;
nachFolger公共列表;
公共列表元素(T wert、ListElement nachFolger){
这个。wert=wert;
这个.nachFolger=nachFolger;
}
@凌驾
公共整数比较(列表元素a){
返回wert.compareTo(a.wert);
}
}

在Java中,减法操作仅适用于数字文本(和自动取消固定的数字对象)。当您试图在非数值
对象
类型上使用它时,会出现错误。如果要比较两个
wert
值,可以执行以下操作:

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

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

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

不能从另一个
对象中减去一个
对象。如果(this.nachFolger.wert-a.wert)
没有返回
布尔值
,您试图实现什么。由于这些字段是
对象
s,因此不能对其进行细分。
wert
需要具有
可比性
,否则需要使用
比较器
,并且如果元素相同,compareTo函数将只返回等于或大于,但决不小于,是否应该与下一个进行比较??@PeterLawrey可能。问题是,
ListElement
是链表的整个实现,还是仅仅一个链接。ListElement是将包含在我的链表中的对象类型,我的LinkedList的类称为Liste,我在那里实现了所有必需的方法s.a:addFirst()addLast delete等…我刚刚这么做了,但是在调用Collections.sort(myList)时,我在主函数中遇到了一个错误,我应该调用其他东西吗?
myList
是否属于类型
ListElement
?没有myList属于类型ListListe类有一个属性ListElement startElement,它是列表的标题以及链表功能s.a:addfirst delete等。。