LinkedList内部类Node改为独立类的代码改动咨询
将LinkedList内部Node改为独立类的必要修改与疑问解答
关于Node是否需要实现LinkedListInterface的明确结论
不需要。LinkedListInterface<T>是定义整个链表的操作契约(比如添加、删除、检索元素),而Node只是链表的基础数据载体,负责存储单个元素和下一个节点的引用,和链表的整体操作逻辑无关,完全不需要实现这个接口。
两处必须修改的核心代码内容
1. 独立Node类的泛型声明调整
原来的内部Node类依赖外部LinkedList<T>的泛型参数T,改成独立类后,必须在Node类自身声明泛型,否则无法识别T类型。同时要修正节点的next引用类型:
// 独立Node类的写法 public class Node<T> { T data; Node<T> next; // 必须指定泛型<T>,否则会变成原始类型 public Node(T data) { this.data = data; this.next = null; } }
2. LinkedList中所有Node引用的泛型补全
原来LinkedList里的head、tail以及方法内的Node变量都是无泛型的原始类型,改成独立Node<T>后,必须给所有Node引用加上泛型<T>,否则会出现编译警告或错误:
// LinkedList类内的修改示例 private Node<T> head; // 原代码是private Node head; private Node<T> tail; // 原代码是private Node tail; // 方法内的示例:创建新节点 public int add(T item) { Node<T> newNode = new Node<>(item); // 原代码是Node newNode = new Node(item); // ... 其余逻辑不变 }
其他需要调整的细节
如果希望Node类的封装性更好,将data和next设为private,那么LinkedList中所有直接访问这两个成员的代码都要替换为对应的getter/setter方法:
- 在独立Node类中添加访问方法:
public T getData() { return data; } public void setData(T data) { this.data = data; } public Node<T> getNext() { return next; } public void setNext(Node<T> next) { this.next = next; }
- 修改LinkedList中的对应代码:
// 原代码:if (nd.data.equals(item)) if (nd.getData().equals(item)) { return pos; } // 原代码:tail.next = newNode; tail.setNext(newNode);
内容的提问来源于stack exchange,提问作者Carlo Viloria
相关产品推荐
相关产品推荐

