通用链表

时间:2014-10-10 14:39:33

标签: java generics linked-list nodes

因此,对于我的班级,我必须编写自己的链表。我最了解这一点,但老师写了mynode类

public class MyNode<E extends Comparable<E>> {
        E element;
        MyNode<E> next;

    public MyNode(E item) {
    element = item;
    next = null;
    }
}

我们打算让一个类与它一起运行并让它运行这个程序

public class TestLinkedList {
    public static void main(String[] args) {
    MyLinkedList<String> L = new MyLinkedList<String>();
    L.add("Browns");
    L.add("Ravens");
    L.add("Steelers");
    L.add("Bengals");
    L.add("Chargers");
    System.out.println(L);
    System.out.println(L.find("Ravens") ? "Found Ravens" : "Did not find Ravens");
    System.out.println(L.find("Giants") ? "Found Giants"
            : "Did not find Giants");
    L.insertElementBefore("Steelers", "Colts");
    L.delete("Chargers");
    System.out.println("Result after deleting Chargers: " + L);
}

}

但我不明白为什么节点扩展可比。我找到了很多例子,其中node只是节点E但没有这样的例子,我只是对如何使用它来编写我的链表感到困惑。

2 个答案:

答案 0 :(得分:3)

首先要做的事:Node 扩展Comparable,Node类的类型E正在扩展Comparable。

泛型绑定<E extends Comparable<E>>是一个“自引用”绑定,表示类型E实现Comparable<E>接口,其接口方法为int compareTo(E e)

你处理Comparable对象的通常原因是你可以对它们进行排序 - 用java的说法,它们有一个自然排序顺序

您的任务是实现MyLinkedList类上调用的各种方法。如果从示例代码中调用的方法是唯一的方法,那么MyNode的泛型类型就没有理由需要Comparable - 即MyNode<E>就可以了。

答案 1 :(得分:2)

Comparable的想法是使节点易于比较。在技​​术层面上,它强加了一个总订单:非等价对象的明确排序(小于或等于是一个强制总订单的运营商的例子)。正如nEm在注释中指出的那样,Java不知道一个对象对于“小于”另一个对象意味着什么,而不像整数;这就是compareTo(Comparable接口公开的方法)的用途。

在不知道链接列表实现的完整界面的情况下,不可能说出它有用的地方。一些有根据的猜测包括Node.insertElementBefore函数或Node.find,如果您需要实现它。