Java 如何使用Compariable比较链接列表中的常规节点?

Java 如何使用Compariable比较链接列表中的常规节点?,java,generics,priority-queue,sortedlist,Java,Generics,Priority Queue,Sortedlist,我正在使用链表实现一个排序列表。我的节点类如下所示 public class Node<E>{ E elem; Node<E> next, previous; } 公共类节点{ E元素; 节点next,previous; } 在排序列表类中,我有add方法,在这里我需要根据通用对象的compareTo()方法实现来比较它们,但是我得到了这个语法错误 “类型E的方法compareTo(E)未定义”。我已经尝试在Node中实现compareTo方法,但是我

我正在使用链表实现一个排序列表。我的节点类如下所示

public class Node<E>{
    E elem;
    Node<E> next, previous;
}
公共类节点{
E元素;
节点next,previous;
}
在排序列表类中,我有add方法,在这里我需要根据通用对象的compareTo()方法实现来比较它们,但是我得到了这个语法错误 “类型E的方法compareTo(E)未定义”。我已经尝试在Node中实现compareTo方法,但是我不能调用任何对象的方法,因为E是泛型类型。 这里是add(elem)方法的未完成部分

公共作废添加(E元素)
{
节点温度=新节点();
温度元素=元素;
如果(isEmpty()){
下一个温度=压头;
head.previous=温度;
压头=温度;
计数器++;
}否则{
for(节点cur=head;cur.next!=null;cur=cur.next){
**if(温度要素比较(电流要素)){**
//做那种事;
}/*否则{
cur.previous=温度;
}*/             
}
//否则在末尾插入
}
}
下面是一个实现compareTo方法的对象

public class Patient implements Comparable<Patient>{
    public int compareTo(Patient that)
    {
        return (this.getPriority() <= that.getPriority() ? 1 : 0 );
    }
}
公共类患者实施可比较{
公共int比较(患者)
{
返回(this.getPriority()将E绑定到可比较的:

public class Node<E extends Comparable<E>>{
    E elem;
    Node<E> next, previous;
}
公共类节点{
E元素;
节点next,previous;
}

现在就可以编译了。

看来您的泛型
E
必须是
E extensed compariable
。这样,您就可以访问
comparieto(E other)
方法。但是,无法添加未实现此接口的元素。

如果希望节点中存储的元素具有可比性,可以使用泛型声明:

public class Node<E extends Comparable<E>> {

    E elem;
    Node<E> next, previous;
}
公共类节点{
E元素;
节点next,previous;
}
这样可以确保每个
E
都实现了
compariable
接口,因此您可以安全地调用
comparieto
方法。

试试看

public class Node<E extends Comparable<E>>{
    E elem;
    Node<E> next, previous;
}
公共类节点{
E元素;
节点next,previous;
}

Hmmm…看起来有些熟悉:)这是否意味着patient类需要实现节点作为接口?它只需要实现
Compariable
接口,这意味着您必须实现一个
Comparieto(patient other)
method.No.患者是可比较的节点。患者不必也不应该知道节点。感谢波希米亚人,这就是我所想的。但现在我得到了绑定不匹配错误加上旧方法错误:(嗯……看起来很熟悉;)感谢大家提供的可比较提示。现在在做了这些更改之后,我得到了这个错误“绑定不匹配:类型E不是类型节点的绑定参数的有效替代品”,在此行节点temp=new Node();temp.elem=elem;
public class Node<E extends Comparable<E>>{
    E elem;
    Node<E> next, previous;
}