Java 小白翻身教程 - 链表结构与编译大法(1)
[](()步骤 2 类里面有顾客属性
================================================================================
嗯,目标是明确的,我需要写一个 Java 类,然后这个类可以存放顾客的信息。我在 tool 文件夹里面随便写了一个 CustNode.java(意思就是顾客的节点类):
代码如下:
package tool;
import entity.Customer;
class CustNode{
public Customer data;
}
CustNode 类里面维护一个顾客的属性,为了方便起见,就直接用 public 了,反正我们自己用用的,无所谓。
[](()步骤 3 排队打饭
============================================================================
可是这样也没用啊,这个类最多就是维护一个顾客的信息,没办法保存多个顾客啊。这可愁死我啦,想了老半天也没想出办法来。于是,我就去请教老板,老板正在炒菜,没空搭理我,但是也没赶我走。
“这样吧,马上会有很多顾客来取餐,想不出来就先放放,你在这帮我看着。”老板说。
“让我看排队啊,这有啥意思哦?”我虽然满腹牢骚,但还是照做了,一边拿出手机刷刷微博,一 边看着顾客在排队取餐。
没想到,看着看着,我突然有了灵感。
[](()步骤 4 从一个顾客联系到另一个顾客
=====================================================================================
顾客 A,B,C 三个人在排队,顾客 A 知道他前面的是顾客 B,顾客 B 知道他前面的是顾客 C。那么从程序的角度来看,A 里面肯定有一个属性是 B 的引用,B 里面肯定有一个属性是 C 的引用。
那么,我只要在 CustNode 里面维护下一个数据的引用,不就可以实现在一个类里面保存多个顾客了吗?
[](()步骤 5 加一个 next 字段
=================================================================================
class CustNode{
public Customer data;
public CustNode next;
}
next 就代表下一个数据。
[](()步骤 6 有参构造方法
==============================================================================
为了方便起见,我写一个有参数的构造方法,这样的好处就是 new 的时候直接就可以给 data 赋值了。
class CustNode{
public Customer data;
public CustNode next;
public CustNode(Customer data){
this.data = data;
}
}
[](()步骤 7 用一个新的类维护 CustNode
========================================================================================
我盯着 CustNode 类看了半天,发现一个事情,就是如果我用这个类,最多只能装两个顾客,一个 data,一个 next。如果再装,就有点难度了。所以,我需要再写一个类,来维护 CustNode,然后再提供一个一个 add 方法和 display 方法,分别用来添加和展示顾客的数据。
我憋了半天终于把代码写出来了。
[](()步骤 8 TuziLinkedList.java
===========================================================================================
package tool;
import entity.Customer;
import tool.CustNode;
public class TuziLinkedList{
public CustNode firstNode; //第一个节点
public CustNode currentNode;//当前的节点
//新增的方法
pu 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 blic void add(Customer cst){
//将数据用节点类包装好,这样才能实现下一个数据的指向
CustNode data = new CustNode(cst);
//先判断是否是第一个节点
if(this.firstNode == null){
this.firstNode = data;
this.currentNode = data;
}else{
//不是第一个节点,就指向当前节点的下一个节点,即 currentNode.next
this.currentNode.next = data;
//因为已经指向下一个了,所以当前节点也要移动过来
this.currentNode = data;
}
}
//展示所有节点
public void display(){
//第一步,肯定是展示第一个节点(this 其实可以省略的)
if(firstNode != null){
System.out.println(firstNode.data.getName());
//然后循环,一直寻找 next 是否为空
CustNode node = firstNode.next;
while(node != null ){
String name = node.data.getName();
System.out.println(name);
//循环的最后,再指向下一个节点,继续下一轮
node = node.next;
}
}
}
}
[](()步骤 9 设计思路
============================================================================
评论