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;
}