首页 > 编程语言 >Java算法基础 - 单链表详解(文末有配套视频)

Java算法基础 - 单链表详解(文末有配套视频)

时间:2022-10-31 13:07:43浏览次数:59  
标签:Customer 单链 Java 步骤 data CustNode 顾客 文末 public


导航

  • ​​步骤 1 只用Java类能实现吗?​​
  • ​​步骤 2 类里面有顾客属性​​
  • ​​步骤 3 排队打饭​​
  • ​​步骤 4 从一个顾客联系到另一个顾客​​
  • ​​步骤 5 加一个next字段​​
  • ​​步骤 6 有参构造方法​​
  • ​​步骤 7 用一个新的类维护CustNode​​
  • ​​步骤 8 TuziLinkedList.java​​
  • ​​步骤 9 设计思路​​
  • ​​步骤 10 原来这就是单链表​​
  • ​​步骤 11 Customer.java​​
  • ​​步骤 12 Application.java​​

咳咳,我是小白,没错,主线剧情又回来了。现在我遇到麻烦了,老板要我设计一个类,可以用来保存多个客户的资料。

步骤 1 只用Java类能实现吗?

以我目前掌握的Java技能,只知道可以新建Java类,然后在Java类里面写属性和方法。现在我已经有了顾客类,我可以通过这个类new出很多个顾客对象。但是问题来了,我怎么保存这些对象呢?

比如今天有10个顾客来登记信息,我必须得有一个东西,来装这些顾客对象啊。

哎呀真搞不懂老板怎么想的,直接用小本子记下来不就行了吗,非要做什么系统。

不过现如今只能好好想想了,emmm,我可以只用Java类实现吗?

步骤 2 类里面有顾客属性

嗯,目标是明确的,我需要写一个Java类,然后这个类可以存放顾客的信息。我在tool文件夹里面随便写了一个CustNode.java(意思就是顾客的节点类):

Java算法基础 - 单链表详解(文末有配套视频)_java

代码如下:

package tool;
import entity.Customer;

class CustNode{
public Customer data;

}

CustNode类里面维护一个顾客的属性,为了方便起见,就直接用public了,反正我们自己用用的,无所谓。

步骤 3 排队打饭

可是这样也没用啊,这个类最多就是维护一个顾客的信息,没办法保存多个顾客啊。这可愁死我啦,想了老半天也没想出办法来。于是,我就去请教老板,老板正在炒菜,没空搭理我,但是也没赶我走。

“这样吧,马上会有很多顾客来取餐,想不出来就先放放,你在这帮我看着。”老板说。

“让我看排队啊,这有啥意思哦?”我虽然满腹牢骚,但还是照做了,一边拿出手机刷刷微博,一 边看着顾客在排队取餐。

没想到,看着看着,我突然有了灵感。

步骤 4 从一个顾客联系到另一个顾客

Java算法基础 - 单链表详解(文末有配套视频)_链表_02

顾客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;//当前的节点

//新增的方法
public 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 设计思路

Java算法基础 - 单链表详解(文末有配套视频)_数据_03

步骤 10 原来这就是单链表

后来查了资料才知道,哦,原来这个属于一种数据结构,叫做链表结构。

步骤 11 Customer.java

我修改了一些类的访问权限和代码,顾客类针对name增加了get方法和set方法。

package entity;
public class Customer {
String name; // 客户姓名
String sex; //性别
String birthDate; //生日
String phoneNumber; //电话号码
int status; //客户状态(1:正常,2:不正常)
static String version = "1.0";

public Customer(){

}

public void eat(){
System.out.println(this.name + " eating...");
}

public static void pay(){
System.out.println(" paying...");
}

public String getName(){
return name;
}

public void setName(String name){
this.name = name;
}
}

步骤 12 Application.java

import static tool.StringUtil.*;
import entity.*;
import tool.*;

public class Application {
public static void main(String[] args){

newLine("******欢迎使用兔子餐厅会员系统******");

Customer c1 = new Customer();
c1.setName("鲁班七号" );
Customer c2 = new Customer();
c2.setName("后裔");
Customer c3 = new Customer();
c3.setName("马克波罗");

TuziLinkedList list = new TuziLinkedList();
list.add(c1);
list.add(c2);
list.add(c3);

list.display();
}
}

最后,奉上视频讲解:​​https://www.bilibili.com/video/BV1ZP4y1h7pr/​


标签:Customer,单链,Java,步骤,data,CustNode,顾客,文末,public
From: https://blog.51cto.com/u_10957019/5809185

相关文章

  • java项目如何打包?
    导航​​步骤1编写编译的脚本​​​​步骤2打包脚本​​​​步骤3jar包里面是什么​​D盘下面的tool文件夹已经有三个工具类了(其实是两个,CustNode是为了TuziLinkedLis......
  • Java基础 -- 我是这么理解static关键字的(文末配讲解视频)
    static是java里面的关键字,主要用来修饰属性和方法。打上static标记后,就是静态的,不需要new就可以访问。导航​​假如一个方法没有用到this?​​​​static的意义​​​​stati......
  • java项目如何引入其他jar包?
    导航​​步骤1lib目录​​​​步骤2修改编译脚本​​​​步骤3编译cstmgr项目​​​​步骤4新的运行方式​​​​步骤5不妨把编译和打包放一起​​​​步骤6总......
  • idea将所有的代码放在一个txt文件里面-java代码
    最近在申请软件著作权要求把所有的代码放在一个txt文件里一个类一个类复制我觉得太傻了,用java写了一个小程序,记录一下packagecom.ynk;importjava.io.*;importjava.util.......
  • java 权限修饰符private
    private修饰后,当前变量只能在当前的内中才能操作//定义一个学生类classStudent{Stringname;privateintscore;publicvoidsetScore(ints){......
  • java中如何修改事务的隔离级别
    事务的特性:原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。(多条语句要么都成功,要么都失败。)一致性(Consistency)事务前后数......
  • JAVA面试官:请说说如何设计线程安全的单例模式?
    单例模式已经被讲烂了,这边复习一下双重检测锁下的线程安全的单例模式。(单例模式复习顶配)publicclassMySingleton{privatestaticvolatileMySingletonmySingleto......
  • JavaScript打包下载最佳实践(StreamSaver.js+zip-stream.js流式下载)
    StreamSaver.js+zip-stream.js流式下载&压缩文件。部分浏览器(火狐)可能不兼容。1应用场景在实际项目中,通常存在用户手动选择下载多个文件的情况。常规的做法(服务器......
  • Java面试:请手写一个文件读取的方法
    比如我有一个1.txt,里面内容如下1.在堆中开辟对象所需空间,分配地址2.初始化对象3.将内存地址返回给栈中的引用变量现在,我要读取这个文本。1.字节流方式publicclassIOTest{......
  • Java冒泡排序法
    publicclassSort{publicvoidBubbleSort(int[]arr){for(inti=0;i<arr.length-1;i++){for(intj=1;j<arr.length;j++){......