如何使用Comparable比较链表中的通用节点?

时间:2011-06-15 10:18:59

标签: java generics priority-queue sortedlist

我正在使用链接列表实现排序列表。我的节点类看起来像这样

public class Node<E>{
    E elem;
    Node<E> next, previous;
}

在排序列表类中我有add方法,我需要根据compareTo()方法的实现比较泛型对象,但是我得到了这个语法错误 “对于类型E,方法compareTo(E)未定义”。我尝试在Node中实现compareTo方法,但是我不能调用任何对象的方法,因为E是泛型类型。 这是add(E elem)方法的未完成体。

public void add(E elem) 
{

        Node<E> temp = new Node<E>();
        temp.elem = elem;

        if( isEmpty() ) {           
            temp.next = head;
            head.previous = temp;
            head = temp;
            counter++; 
        }else{
            for(Node<E> cur = head; cur.next != null ; cur= cur.next) {
                **if(temp.elem.comparTo(cur.elem)) {**
                    //do the sort;

                }/*else{
                    cur.previous = temp;
                }*/             
            }
            //else insert at the end

        }
}

这是一个对象实现compareTo方法

public class Patient implements Comparable<Patient>{
    public int compareTo(Patient that)
    {
        return (this.getPriority() <= that.getPriority() ? 1 : 0 );
    }
}

4 个答案:

答案 0 :(得分:6)

将E绑定为可比较:

public class Node<E extends Comparable<E>>{
    E elem;
    Node<E> next, previous;
}

现在将编译。

答案 1 :(得分:3)

您的通用E似乎必须是E extends Comparable<E>。这样您就可以访问compareTo(E other)方法。但是,您将无法添加未实现此接口的元素。

答案 2 :(得分:3)

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

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

    E elem;
    Node<E> next, previous;
}

这样可以确保每个E实现Comparable接口,因此您可以安全地调用compareTo方法。

答案 3 :(得分:2)

尝试

public class Node<E extends Comparable<E>>{
    E elem;
    Node<E> next, previous;
}