链表是一种根据元素节点逻辑关系排列起来的一种数据接口;利用链表可以存储多个数据,类似数组,但是与数组不同的是链表的长度是可变的,对于数据的增删操作是比较方便的,具有链表结构的集合类入
linkedset
,
linkedmap
具有增删快,查询慢的特点;
链表操作的标准形式结构
- 客户端代码不关注具体的Node及引用关系,只需要关注Link中提供的数据操作的方法
- Node关注数据的保存和引用关系的分配
- Link关注Node对象的产生和根节点
代码如下:
Node
package listStructure.entity;
/**
* 节点
* 主要功能:
* 保存数据
* 设置下一个节点
*/
public class Node {//定义一个节点
private String data;//需要保存的数据
private Node next;//下一个节点
public Node(String data) {//只有当数据存在时候才可以创建节点
this.data = data;
}
/**
* 设置节点关系
*/
public void setNext(Node next) {//设置下一节点
this.next = next;
}
public Node getNext() {//获取下一个节点
return this.next;
}
public String getData() {//获取当前节点的数据
return this.data;
}
/**
* 实现节点的增加
* 使用递归操作
*/
public void addNode(Node newNode) {
if(this.next == null) {//当当前节点中的下一个节点为null时,才可以把新数据保存到下一个节点
this.next = newNode;
}else {//如果当前节点中的下一节点不是null则需要再次使用下一个节点判断是否可以添加节点
this.next.addNode(newNode);
}
}
/**
* 输出节点数据
*/
public void printNode() {
System.out.println(this.data);
if (this.next != null) {
this.next.printNode();
}
}
}
Link
package listStructure.Utils;
import listStructure.entity.Node;
/**
* 操作Node中的数据
* @author cgg48
*
*/
public class Link {
private Node root;//根节点
public void add(String data) {
/**
* 如果是第一个数据,则根节点就是第一个节点,否则将数据添加到存在的数据的后面
*/
Node newNode = new Node(data);
if (this.root == null) {
this.root = newNode;
}else {
this.root.addNode(newNode);
}
}
/**
* 使用递归输出数据
*/
public void print() {
if (root != null) {
this.root.printNode();
}
}
}
Test
package listStructure.test;
import listStructure.Utils.Link;
public class LinkTest {
public static void main(String[] args) {
/**
* 新增几个节点并输出
*/
Link link = new Link();
link.add("测试1");
link.add("测试2");
link.add("测试3");
link.add("测试4");
/**
* 输出
*/
link.print();
}
}
结果