麻烦使用compareTo()与泛型和LinkedList并排序

时间:2017-04-27 10:11:01

标签: java linked-list nodes

我正在尝试创建一个扩展LinkedList类的SortedList类,只有两者之间的区别在于SortedList有一个方法可以按顺序插入其中的任何内容。

public class SortedList<T> extends LinkedList<T> implements Iterable<T> {

    // Class variables and constructor

    public void insert(T objectToAdd){
    Node<T> newNode = new Node<>(objectToAdd);
    Node<T> currentNode = head.getNext(); // Head node is a single sentinel node, so we always need to start comparing from its next.

    if (objectToAdd.compareTo(currentNode.getPayload()) == -1){
    // Insert and setup node links.

    } else if (... rest of here){

    }
}

我遇到的问题是使用compareTo会出现此错误:

http://puu.sh/vxKxv/c9ee91d54c.png

这是Node类。

public class Node<T>{

    // Class Variables
    private final T data;
    public int index;
    private Node<T> next;
    private Node<T> prev;

    public Node(T data) {
        this.payload = payload;
        this.next = null;
        this.prev = null;
    }

    public void setNext(Node<T> newNode) {
        this.next = newNode;
    }

    public void setPrev(Node<T> newNode) {
        this.prev = newNode;
    }

    public Node<T> getNext() {
        return this.next;
    }

    public Node<T> getPrev() {
        return this.prev;
    }

    public T getData() {
        return this.data;
    }
}

如果您需要我发布任何其他课程,请告诉我。

现在已经坚持了一段时间,有人能帮忙吗?

1 个答案:

答案 0 :(得分:2)

T不是具体类型,因此编译器只知道它具有在Object类中定义的对象。如果有人制作SortedList,它将没有compareTo方法,因此它无法工作。您需要确保T将包含compareTo方法。最简单的方法是

public class SortedList<T extends Comparable> extends LinkedList<T> implements Iterable<T> { ... }

另外在我看来,最好检查一下

if (objectToAdd.compareTo(currentNode.getPayload()) < 0) { ... }

因为它为您提供了objectToAdd&lt;的关系。 currentNode.getPayload()可视化。此外,Comparable接口不保证它将为-1。它说:

  

@return一个负整数,零或一个正整数作为此对象            小于,等于或大于指定的对象。