java - Node<E> 在此链表 Java 示例代码中代表什么?

标签 java generics linked-list nodes

我正在学习链接列表,但我不明白教科书上的这个例子。我理解泛型的概念(尽管目前可能还不是很好),并在自己的代码中实现了几个泛型类,并且我已经阅读和观看了很多教程,但我仍然无法理解什么Node< E > 实际上确实如此(实际上是什么,它是一种类型吗?),所以我无法真正测试这段代码。

import java.util.*;

public class SinglyLinkedList<E> {

    private class Node<E> {
        private E element;
        private Node<E> next;

        public Node(E e, Node<E> n) {
            element = e;
            next = n;
        }

        public E getElement() { 
            return element; 
        }

        public Node<E> getNext() { 
            return next; 
        }

        public void setNext(Node<E> n) { 
            next = n; 
        }
    } 
}

例如,我尝试创建 Node 对象或 SinglyLinkedList 对象,如下所示:

SinglyLinkedList<E> NodeEl = new SinglyLinkedList<E>();
Node <E> node = new Node<E>();

并将各种对象传递给它们都无济于事。我显然错过了一些东西,但我不明白是什么。

最佳答案

class SinglyLinkedList<E>表示泛型类型元素的链接列表。

例如,您可以创建 String 的链接列表与:

SinglyLinkedList<String> list = new SinglyLinkedList<String>();

class Node<E>SinglyLinkedList 的内部类类(class)。它表示链表中的单个链接,其中包含单个元素(通用类型)和对下一个链接的引用。

NodeSinglyLinkedList 的内部类,如果不提供封闭实例的实例(即 SinglyLinkedList 类的实例),则无法创建它的实例。

因此你只能这样写

Node<E> node = new Node<E>();

SinglyLinkedList 的内部实例(即非静态)方法类,其中(SinglyLinkedList 类的)封闭实例可用。

也就是说,如果 Node应保存与 SinglyLinkedList 的元素类型相同类型的元素,它不应该是通用的。它可以简单地使用封闭类的泛型类型参数( SinglyLinkedList ):

public class SinglyLinkedList<E> {

    private class Node {
        private E element;
        private Node next;

        public Node(E e, Node n) {
            element = e;
            next = n;
        }

        public E getElement() { 
            return element; 
        }

        public Node getNext() { 
            return next; 
        }

        public void setNext(Node n) { 
            next = n; 
        }
    } 
}

关于java - Node<E> 在此链表 Java 示例代码中代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47976203/

相关文章:

swift - 协议(protocol)不符合自身?

c - C中的链表程序

使用链表的 Java 递归二项式系数

java - 将 java 从 1.8.0_77 更新到 1.8.0_121 后,JAXB 不会解码

java - 如何确定哪个线程将首先运行?

java - 设置整个盒子的可见性

java - 使用runtime.exec()调用java方法

go - 遍历 []rune |在泛型中传递的字符串

java - 将整数添加到 ArrayList<Integer>

C# 如何检查一个类是否实现了泛型接口(interface)?