常规链接列表



因此,对于我的类,我必须编写自己的链表。我基本上理解,但老师写了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);
}
}

但我不明白为什么节点的扩展具有可比性。我发现了很多节点只是节点E的例子,但没有一个像这样,我只是被如何使用它来编写我的链表所困扰。

首先:Node不是扩展Comparable,Node类的类型E是扩展Comparaable。

泛型绑定<E extends Comparable<E>>是一个"自引用"绑定,意味着类型E实现了Comparable<E>接口,该接口具有方法int compareTo(E e)

处理Comparable对象的通常原因是为了对它们进行排序——用java的话说,它们有一个自然排序顺序

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

Comparable的理念是使节点易于比较。在技术层面上,它强加了一个总顺序:不相等对象有一个明确的顺序(小于或等于是强加总顺序的运算符的一个例子)。正如nEm在评论中指出的那样,Java不知道一个对象"小于"另一个对象意味着什么,这与整数不同;这就是compareTo(Comparable接口公开的方法)的作用。

如果不知道链表实现的完整接口,就不可能说出它在哪里有用。一些有根据的猜测包括Node.insertElementBefore函数或Node.find(如果需要实现的话)。

相关内容

  • 没有找到相关文章

最新更新