因此,对于我的班级,我必须编写自己的链表。我最了解这一点,但老师写了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但没有这样的例子,我只是对如何使用它来编写我的链表感到困惑。
答案 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
,如果您需要实现它。