Java 通用链表

Java 通用链表,java,generics,linked-list,nodes,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; } } 我们要创建一个类来运行它,并让它运行这个程序 pu

所以对于我的班级,我必须写我自己的链表。我基本上能理解,但老师写了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为什么要扩展。我已经找到了很多例子,其中node只是node E,但没有一个是这样的,我只是不知道如何使用它来编写我的linkedlist

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


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

第一件事:Node不是扩展Comparable,Node类的类型E是扩展Comparable

泛型绑定是一个自引用绑定,意味着类型E实现了Compariable接口,该接口具有int ComparietoE方法

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


您的任务是实现MyLinkedList类上调用的各种方法。如果从示例代码中调用的方法是唯一的方法,则没有理由认为MyNode的泛型类型需要具有可比性-即MyNode就可以了。

这与MyLinkedList.find实现有关吗?该方法是否使用Compariable接口?通常,当您希望在列表中有比较操作时,您会扩展Compariable。由于MyNode对象是用户定义的,Java无法轻松比较它们。例如:Java知道如何比较“大于”的数字。它知道5比3大,但它如何知道MyNodeA比MyNode B大。请看本教程,了解为什么要扩展可比接口-我想使用MyNode而不使用可比接口,因为这是一个已经定义多次的示例。但是我的老师让我使用它,我试图制作一个包含节点的链表,但对节点是如何工作的,甚至对如何使用它们感到困惑。每个节点是要保存一个值还是什么?我需要创建一个add方法,该方法的功能类似于向Java链表添加一个值和一个find-remove,并在元素之前插入一个,我相信这是一个to-string方法,但一旦我理解了其余的方法,它就不应该是一个问题。如果两个节点中的任何一个都是可比较的,那么您只需要该值是可比较的,并且您可以委托进行比较要比较节点的值,或者要为节点构建一个类似的比较器方法。除非其中一个原因被说明,否则使价值具有可比性是一个设计缺陷。是,每个节点都有一个值。您的节点类还应该具有指向列表中下一个节点的引用链接,以及用于添加、插入的方法。这些方法将是递归的,调用下一个链接的相同方法,直到这个链接是执行操作的正确链接。谢谢您的帮助。我还是没有运气。我无法编辑节点类或主类。我一直在制作一个节点数组,但是当我做system.out.printlnl时,我会得到mylinkedlist@和内存位置。希望我能在作业到期前和我的教授谈谈,我现在知道了做作业的方法。如果你认为这有助于理解我需要做什么,我可以把你和作业联系起来