Java小白翻身教程-链表结构与编译大法(1)

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

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


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


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


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


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


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


步骤 2 类里面有顾客属性


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

a8ef33630dc58bb1ffa460f56eb9b8c8.png

代码如下:

package tool;
import entity.Customer;
class CustNode{
  public Customer data; 
}

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


步骤 3 排队打饭


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


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


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


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

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


763f24fc516263c8a90bbe7e7fb33647.png

顾客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 设计思路

e80f0b9d457ff892d88141d39d646de4.png


步骤 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();
   }
}


相关文章
|
2月前
|
存储 Java 编译器
深入理解Java虚拟机--类文件结构
本内容介绍了Java虚拟机与Class文件的关系及其内部结构。Class文件是一种与语言无关的二进制格式,包含JVM指令集、符号表等信息。无论使用何种语言,只要能生成符合规范的Class文件,即可在JVM上运行。文章详细解析了Class文件的组成,包括魔数、版本号、常量池、访问标志、类索引、字段表、方法表和属性表等,并说明其在Java编译与运行过程中的作用。
|
3月前
|
Oracle Java 关系型数据库
java 编程基础入门级超级完整版教程详解
这份文档是针对Java编程入门学习者的超级完整版教程,涵盖了从环境搭建到实际项目应用的全方位内容。首先介绍了Java的基本概念与开发环境配置方法,随后深入讲解了基础语法、控制流程、面向对象编程的核心思想,并配以具体代码示例。接着探讨了常用类库与API的应用,如字符串操作、集合框架及文件处理等。最后通过一个学生成绩管理系统的实例,帮助读者将理论知识应用于实践。此外,还提供了进阶学习建议,引导学员逐步掌握更复杂的Java技术。适合初学者系统性学习Java编程。资源地址:[点击访问](https://pan.quark.cn/s/14fcf913bae6)。
311 2
|
6月前
|
人工智能 JSON Java
列表结构与树结构转换分析与工具类封装(java版)
本文介绍了将线性列表转换为树形结构的实现方法及工具类封装。核心思路是先获取所有根节点,将其余节点作为子节点,通过递归构建每个根节点的子节点。关键在于节点需包含 `id`、`parentId` 和 `children` 三个属性。文中提供了两种封装方式:一是基于基类 `BaseTree` 的通用工具类,二是使用函数式接口实现更灵活的方式。推荐使用后者,因其避免了继承限制,更具扩展性。代码示例中使用了 Jackson 库进行 JSON 格式化输出,便于结果展示。最后总结指出,理解原理是进一步优化和封装的基础。
192 0
|
6月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
6月前
|
传感器 监控 Java
Java代码结构解析:类、方法、主函数(1分钟解剖室)
### Java代码结构简介 掌握Java代码结构如同拥有程序世界的建筑蓝图,类、方法和主函数构成“黄金三角”。类是独立的容器,承载成员变量和方法;方法实现特定功能,参数控制输入环境;主函数是程序入口。常见错误包括类名与文件名不匹配、忘记static修饰符和花括号未闭合。通过实战案例学习电商系统、游戏角色控制和物联网设备监控,理解类的作用、方法类型和主函数任务,避免典型错误,逐步提升编程能力。 **脑图速记法**:类如太空站,方法即舱段;main是发射台,static不能换;文件名对仗,括号要成双;参数是坐标,void不返航。
246 5
|
7月前
|
JavaScript NoSQL Java
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
376 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
|
8月前
|
消息中间件 Java 数据库
自研Java框架 Sunrays-Framework使用教程「博客之星」
### Sunrays-Framework:助力高效开发的Java微服务框架 **Sunrays-Framework** 是一款基于 Spring Boot 构建的高效微服务开发框架,深度融合了 Spring Cloud 生态中的核心技术组件。它旨在简化数据访问、缓存管理、消息队列、文件存储等常见开发任务,帮助开发者快速构建高质量的企业级应用。 #### 核心功能 - **MyBatis-Plus**:简化数据访问层开发,提供强大的 CRUD 操作和分页功能。 - **Redis**:实现高性能缓存和分布式锁,提升系统响应速度。 - **RabbitMQ**:可靠的消息队列支持,适用于异步
自研Java框架 Sunrays-Framework使用教程「博客之星」
|
8月前
|
存储 移动开发 算法
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
152 1
|
8月前
|
前端开发 Java 开发工具
Git使用教程-将idea本地Java等文件配置到gitte上【保姆级教程】
本内容详细介绍了使用Git进行版本控制的全过程,涵盖从本地仓库创建到远程仓库配置,以及最终推送代码至远程仓库的步骤。
446 0
|
8月前
|
Java 数据库连接 数据处理
探究Java异常处理【保姆级教程】
Java 异常处理是确保程序稳健运行的关键机制。它通过捕获和处理运行时错误,避免程序崩溃。Java 的异常体系以 `Throwable` 为基础,分为 `Error` 和 `Exception`。前者表示严重错误,后者可细分为受检和非受检异常。常见的异常处理方式包括 `try-catch-finally`、`throws` 和 `throw` 关键字。此外,还可以自定义异常类以满足特定需求。最佳实践包括捕获具体异常、合理使用 `finally` 块和谨慎抛出异常。掌握这些技巧能显著提升程序的健壮性和可靠性。
142 4