java原生手写泛型单向链表,含private static node和linkedlist类,封装add/get/remove/isempty/size等操作,严格边界校验,支持tostring()和iterable接口。
用java原生代码手写一个标准的单向链表,核心是定义节点(node)和链表(linkedlist)两个类,封装增、删、查、遍历等基本操作,并保证边界处理严谨、方法命名符合java习惯。
定义内部静态节点类
单向链表的每个节点包含数据域和指向下一个节点的引用。推荐使用泛型支持任意类型,节点类应设为private static,避免持有外部类引用导致内存泄漏:
- 声明泛型参数
<t></t>,使节点可存储任意类型数据 - 字段
T data和Node<t> next</t>均设为final或至少private,禁止外部直接修改 - 提供带参构造器,便于初始化
实现链表主体类与核心字段
链表类维护头节点引用(head)和长度计数(size),不暴露内部结构:
-
private Node<t> head</t>:始终指向第一个有效节点,空链表时为null -
private int size:实时记录元素个数,避免每次遍历统计 - 构造器可提供无参(创建空链表)和接受集合的重载,增强实用性
封装常用操作方法(含边界检查)
所有 public 方法必须校验输入合法性,尤其索引类操作需判断 index = size:
-
add(T item):在尾部追加,需遍历到末尾或维护tail引用(若追求 O(1) 尾插,可额外加 tail 字段) -
add(int index, T item):在指定位置插入,需先找到前驱节点(index=0 时特殊处理为头插) -
get(int index):从头遍历至目标位置,返回数据值;越界抛IndexOutOfBoundsException -
remove(int index):断开前后连接,注意 index=0 时更新 head,移除后 size 减 1 -
isEmpty()和size():直接返回对应字段,O(1) 时间复杂度
补充实用功能与规范细节
提升可用性和健壮性:
- 重写
toString():按[a, b, c]格式返回,方便调试 - 提供
iterator()方法返回自定义迭代器,支持 for-each 遍历(实现Iterable<t></t>接口) - 所有异常使用标准 JDK 异常,如
NullPointerException(插入 null 且不允许)、IndexOutOfBoundsException - 避免在方法中修改传入对象状态,保持函数式风格倾向
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











