上一篇:升华数组-使用链表灵活整理数据 | 带你学《Java面向对象编程》之八十九
【本节目标】
通过阅读本节内容,你将掌握实现添加链表数据的方法,对链表中Node节点应该具备的基本操作有进一步的理解。
数据保存:public void add(E e)
通过之前的分析可以发现在进行链表操作的过程之中为了避免转型的异常应该使用的泛型,同时也应该设计一个链表的标准接口,同时具体实现该接口的时候还应该通过Node类做出节点的关系描述。
范例:基本结构
interface ILink<E> { //设置泛型避免安全隐患
public void add(E e) ;
}
class LinkImpl<E> implements ILink<E> {
private class Node { //保存节点的数据关系
private E data ; //保存数据
private Node next ; //保存下一个引用
public Node(E data) { //有数据的情况下才有意义
this.data = data ;
}
}
//------------以下为Link类中定义的结构-----------------
}
在现在所定义的Node类之中并没有出现有setter与getter方法,是因为内部类中的私有属性也方便外部类直接访问。
范例:实现数据增加
interface ILink<E> { //设置泛型避免安全隐患
public void add(E e) ;
}
class LinkImpl<E> implements ILink<E> {
private class Node { //保存节点的数据关系
private E data ; //保存数据
private Node next ; //保存下一个引用
public Node(E data) { //有数据的情况下才有意义
this.data = data ;
}
//第一次调用:this = LinkImpl.root ;
//第二次调用:this = LinkImpl.root.next ;
//第三次调用:this = LinkImpl.root.next.next ;
public void addNode(Node newNode){ //保存新的Node数据
if (this.next == null) { //当前节点的下一个节点为null
this.next = newNode; //保存当前节点
}else {
this.next.addNode(newNode);
}
}
}
//------------以下为Link类中定义的成员-----------------
private Node root ; //保存根元素
//------------以下为Link类中定义的方法-----------------
public void add(E e){
if(e == null){
return ;
}
//数据本身是不具有关联特性的,只有Node类有,要想关联处理就必须将数据包装在Node类中
Node newNode = new Node(e); //创建一个新的节点
if (this.root == null){ //现在没有根节点
this.root = newNode; //第一个节点作为根节点
}else{ //根节点存在
this.root.addNode(newNode); //将新节点保存在合适的位置
}
}
}
public class LinkDemo{
public static void main(String args[]) {
ILink<String> all = new LinkImpl<String>() ;
all.add("Hello") ;
all.add("World") ;
all.add("MLDN") ;
}
}
Link类只是负责数据的操作与根节点的处理,而所有后续节点的处理全部都是由Node类负责完成的。
想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学