范例:宠物商店

//宠物接口类
interface Pet {public abstract String getName();// 获取名字抽象方法public abstract int getAge();// 获取年龄抽象方法
}// 猫类
class Cat implements Pet {private String name;// 猫的名字private int age;// 猫的年龄public Cat(String name, int age) {this.name = name;this.age = age;}@Overridepublic boolean equals(Object obj) {// 覆写equals方法if (this == obj) {return true;}if (obj == null) {return false;}if (!(obj instanceof Cat)) {return false;}Cat cat = (Cat) obj;// 向下强转if (this.name.equals(cat.name) && this.age == cat.age) {return true;}return false;}@Overridepublic String getName() {return this.name;}@Overridepublic int getAge() {return this.age;}@Overridepublic String toString() {return "宠物猫的名字:" + this.name + ";年龄:" + this.age + "。";}}// 狗狗类
class Dog implements Pet {private String name;// 狗的名字private int age;// 狗的年龄public Dog(String name, int age) {this.name = name;this.age = age;}@Overridepublic boolean equals(Object obj) {if (this == obj) {return true;}if (obj == null) {return false;}if (!(obj instanceof Dog)) {return false;}Dog dog = (Dog) obj;if (this.name.equals(dog.name) && this.age == dog.age) {return true;}return false;}@Overridepublic String getName() {return this.name;}@Overridepublic int getAge() {return this.age;}@Overridepublic String toString() {return "狗狗的名字:" + this.name + ";年龄" + this.age + "。";}
}// 宠物店类
class PetShop {private Link pets = new Link();// 1.宠物上架public void add(Object obj) {this.pets.add(obj);}// 2.宠物下架public void remove(Object obj) {this.pets.remove(obj);}// 3.货架模糊查询public Link search(String keyWord) {Link result = new Link();Object[] data = this.pets.toArray();for (int i = 0; i < data.length; i++) {Pet pet = (Pet) data[i];if (pet.getName().contains(keyWord)) {result.add(pet);}}return result;}
}// 链表类
class Link {class Node {// 定义节点类private Node next;// 引用关系private Object data;// 保存数据// 构造方法public Node(Object data) {this.data = data;}// 1.添加节点public void addNode(Node newNode) {if (this.next == null) {// 当前节点的下一个节点为空this.next = newNode;} else {// 向后继续保存this.next.addNode(newNode);}}// 2.查询数据public boolean containsNode(Object data) {if (data.equals(this.data)) {// 当前节点数据为要查询的数据return true;// 后面不在需要查询} else {// 当前节点不能满足查询if (this.next != null) {// 判断后续是否还有节点return this.next.containsNode(data);} else {// 没后后续节点return false;}}}// 3.数据修改public void setNode(int index, Object data) {// 使用自定义foot内容与 index比较if (Link.this.foot++ == index) {this.data = data;// 进行内容修改} else {// 继续this.next.setNode(index, data);}}// 4.获取数据public Object getNode(int index) {// 使用自定义foot内容与 index比较// foot自增,目的为下一次查询方便if (Link.this.foot++ == index) {// 要查询的索引return this.data;// 返回当前节点数据} else {// 继续向后查return this.next.getNode(index);}}// 5.删除数据public void removeNode(Node previous, Object data) {if (data.equals(this.data)) {// 数据对应previous.next = this.next;// 空出当前节点} else {// 继续向后查询this.next.removeNode(this, data);}}// 6.对象数组public void toArrayNode() {Link.this.retArray[Link.this.foot++] = this.data;if (this.next != null) {// 后续还有元素this.next.toArrayNode();}}}// ================以上为内部类================private Node root;// 根节点private int count = 0;// 保存元素个数private int foot = 0;private Object[] retArray;// 返回数组// 1.添加数据public void add(Object data) {if (data == null) {// 数据不允许为nullreturn;}Node newNode = new Node(data);// 保存数据,数据打包if (this.root == null) {// 当前没有根节点this.root = newNode;// 新节点为根节点} else {// 根节点存在,其它节点给Node处理this.root.addNode(newNode);}this.count++;// 每次保存成功后自增一次}// 2.查询数据public boolean contains(Object data) {if (data == null || this.root == null) {// 没有数据,根节点也没有数据return false;}return this.root.containsNode(data);}// 3.修改数据public void set(int index, Object data) {if (index > this.count) {return;}this.foot = 0;// 归零,从头向后开始this.root.setNode(index, data);// 修改过程交给Node}// 4.获取数据public Object get(int index) {if (index > this.count) {// 超出查询范围return null;}this.foot = 0;// 归零,从头向后开始return this.root.getNode(index);// 查询过程交给Node}// 5.删除数据public void remove(Object data) {if (this.contains(data)) {// 1.先判断是否存在此数据// 2.判断删除的数据是否根节点数据// 3.root是Node的对象,此处直接访问内部类的私有操作if (data.equals(this.root.data)) {// 根节点是否满足删除this.root = this.root.next;// 空出当前节点} else {// 不是根节点// 根节点的下一个节点开始判断this.root.next.removeNode(this.root, data);}this.count--;// 删除成功后自减}}// 6.链表长度public int length() {return this.count;}// 7.链表是否为空public boolean isEmpty() {return this.count == 0;}// 8.对象数组public Object[] toArray() {if (this.root == null) {return null;}this.foot = 0;this.retArray = new Object[this.count];// 开辟数组this.root.toArrayNode();return this.retArray;}// 打印方法public static void print(Object[] data) {for (Object x : data) {System.out.println(x + " ");}System.out.println();}}public class Demo04 {public static void main(String[] args) {PetShop ps = new PetShop();ps.add(new Cat("加菲猫", 5));ps.add(new Cat("秋山猫", 5));ps.add(new Cat("无毛猫", 7));ps.add(new Dog("柴犬", 4));ps.add(new Dog("秋田犬", 3));ps.add(new Dog("猎犬", 6));Link all = ps.search("秋");Object[] data = all.toArray();Link.print(data);}
}

Java 链表(宠物商店)相关推荐

  1. java关联宠物商店项目_Java实现宠物商店管理

    本文实例为大家分享了Java实现宠物商店管理的具体代码,供大家参考,具体内容如下 第一种实现方式:抽象类和对象数组 public abstract class AbstractPet //定义宠物模板 ...

  2. [附源码]计算机毕业设计JAVA网上宠物商店

    [附源码]计算机毕业设计JAVA网上宠物商店 项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(Intell ...

  3. [附源码]java毕业设计宠物商店管理系统

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

  4. java s2 宠物商店_北大青鸟accp S2 java宠物商店项目案例代码有数据库表

    [实例简介] 这是 北大青鸟 6.0 S2 JAVA课本的项目案例 代码有注视 [实例截图] [核心代码] 51071f31-b79d-42d6-9b52-feb0304525bc └── ch15 ...

  5. java宠物商店管理系统_Java实现宠物商店管理系统

    Java实现宠物商店管理系统,宠物,宠物商店,数组,您的,还需要 Java实现宠物商店管理系统 易采站长站,站长之家为您整理了Java实现宠物商店管理系统的相关内容. 本文实例为大家分享了Java实现 ...

  6. java实例分析宠物商店_java实例分析:宠物商店.ppt

    JAVA 应用开发详解 面向对象(高级) -- 实例分析:宠物商店 实例要求 实现一个宠物商店,在宠物商店中可以有多种(由用户决定数量)宠物,试表示出此种关系,并要求可以根据宠物的关键字查找到相应的宠 ...

  7. Eclipse+Java+Swing实现宠物商店管理系统

    Java+Swing实现宠物商店 一.系统介绍 二.系统展示 1.主界面 2.增加宠物 3.删除宠物 4.修改宠物 5.查询宠物 6.模块查询 三.系统实现 Cat.java Dog.java Mou ...

  8. 通过宠物商店理解java面向对象

    前言:本篇博客,适合刚刚学完java基础语法的但是,对于面向对象,理解不够深刻的读者,本文通过经典的宠物商店,来让读者深刻的理解,面向对象,IS-A,HAS-A法则.本文不仅仅是简单的用java来模拟 ...

  9. [附源码]java毕业设计网上宠物商店

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

最新文章

  1. 深入理解Java虚拟机(JVM高级特性与最佳实践java虚拟机)的一些知识总结
  2. loj#115. 无源汇有上下界可行流
  3. linux swap 分区调控(swap分区 lvm管理)
  4. 如何设置linux端口桥接,怎么在linux下配置桥接?
  5. c语言二叉树反序列化,序列化和反序列化二叉树
  6. Java基础知识回顾--正则表达式
  7. NVR和DVR有什么区别_NVR和DVR哪个好 IP Camera
  8. UE4 引擎 package 可执行文件过程中碰到fatal error的常见解决方法
  9. 拼多多秒杀活动的谣言
  10. linux 3d 制作工具,3D特效制作 SideFX Houdini FX For Win/Linux/macOS 及安装教程
  11. 全国计算机信息高新技术和全国计算机等级考试区别
  12. AE实践一:跑车动画
  13. 必须注销计算机才能应用这些更改,Win10不用注销电脑就可以实现切换开始菜单/屏幕的方法...
  14. ResNet成阿尔法元核心技术 旷视孙剑详解Zero的伟大与局限
  15. 如何从一个文件夹中批量读取图片名字有规则
  16. XMOS笔记1--LED的控制
  17. android 仿蘑菇街首页,高仿蘑菇街欢迎页
  18. linux笔记-系统修复
  19. 从生活习惯到肠道微生物,揭秘胃肠道癌症的成因
  20. 数据库(DataBase)-什么是数据库

热门文章

  1. .net/C# 微信小程序如何生成二维码图片
  2. 【春招】字节跳动、蘑菇街四轮面试,分别问了啥?
  3. 旭锋科技制造信息管理系统--客户端主页面
  4. luci框架-LUA的一个web框架使用
  5. 小哥哥,这边有个恋爱建议你谈一下
  6. 仿拼多多拼单成功的弹幕队列消息提醒
  7. cpu要和gpu搭配吗_显卡和CPU搭配有要求吗 CPU和显卡怎么搭配最好? (全文)
  8. WeGame,请介绍下你自己
  9. 摄影入门-之三-基础理论篇
  10. 为什么不去创业——Why to Not Not Start a Startup