案例:宠物猫信息管理
需求:
--添加和显示宠物猫信息
--查找某只宠物猫信息并输出
--修改宠物猫信息
--删除宠物猫信息
类:
属性
--名字 name
--年龄 month
--品种 species
方法:
--构造方法
--获取设置属性方法
--其他方法
编程注意点:
1、输出时要在猫类中重写toString方法
2、由于自定义类,而且用到set,set会去调用hashcode 和 equals方法,
   所以在猫类中要重写 hashcode 和 equals【重点】 方法
   用到反射类,强转,比较
   迭代器每次使用都要重新赋值。
   
猫类:
package com.imooc.set;

public class Cat {
    private String name;
    private int month;
    private String species;
    //构造方法

//构造方法
    public Cat(String name, int month, String species) {
        this.name = name;
        this.month = month;
        this.species = species;
    }

//get set 方法
    public String getName() {
        return name;
    }

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

public int getMonth() {
        return month;
    }

public void setMonth(int month) {
        this.month = month;
    }

public String getSpecies() {
        return species;
    }

public void setSpecies(String species) {
        this.species = species;
    }

@Override
    public String toString() {
        return "[" +
                "姓名:'" + name + '\'' +
                ", 年龄:" + month +
                ", 品种:" + species + '\'' +
                ']';
    }

@Override
    public boolean equals(Object obj) {
        //如果对象相等,返回true,不用比较属性
        if (this == obj)
            return true;
        //判断obj是否是cat类的对象
        if (obj.getClass() == Cat.class) {
            Cat cat = (Cat) obj;
            return cat.getName().equals(name) &&
                    (cat.getMonth() == month) &&
                    (cat.getSpecies().equals(species));
        }else
            return false;
    }

@Override
    public int hashCode() {
        int result = getName() != null ? getName().hashCode() : 0;
        result = 31 * result + getMonth();
        result = 31 * result + (getSpecies() != null ? getSpecies().hashCode() : 0);
        return result;
    }
}

主类:
package com.imooc.set;

import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class CatTest {
    public static void main(String[] args) {
        //define
        Cat huahua = new Cat("花花", 12, "英国短毛猫");
        Cat fanfan = new Cat("翻翻", 3, "中华田园猫");
        //将宠物猫对象放入hashset
        Set <Cat> set = new HashSet <Cat>();
        set.add(huahua);
        set.add(fanfan);
        //显示宠物猫信息
        Iterator <Cat> it = set.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
//在添加一个与花花属性一样的猫
        Cat huahua01 = new Cat("花花", 12, "英国短毛猫");
        set.add(huahua01);
//显示宠物猫信息
        System.out.println("+++++++++++++++++++++++++++++++++");
        System.out.println("+++++++添加宠物猫后的输出+++++++++");
        it = set.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
        //重新插入新的宠物猫信息
        Cat huahua02 = new Cat("花花二代", 2, "英国短毛猫");
        set.add(huahua02);
        System.out.println("+++++++++++++++++++++++++++++++++");
        System.out.println("+++++添加花花二代后宠物猫信息++++++");
        it = set.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
        System.out.println("+++++++++++++++++++++++++++++++++");
        System.out.println("+++++通过对象查找花花信息++++++");
        //在集合中查找花花的信息并输出
        if (set.contains(huahua)) {
            System.out.println("花花找到了!");
            System.out.println(huahua);
        } else {
            System.out.println("花花没找到");
        }
        System.out.println("+++++++++++++++++++++++++++++++++");
        System.out.println("+++++通过名字查找花花信息++++++");
        //在集合中使用名字查找花花的信息
        boolean flag = false;
        Cat c = null;
        it = set.iterator();
        while (it.hasNext()) {
            c = it.next();
            if (c.getName().equals("花花")) {
                flag = true;
                break;
            }
        }
        if (flag == true) {
            System.out.println("花花找到了!");
            System.out.println(c);
        } else {
            System.out.println("花花没找到");
        }

/**
         * 第一次判断,名字等于花花的
         * 第一种核心思路是只有一个,唯一,匹配到后break
         * 第二种是遍历,但是和set的size无关,然后直接删除某个元素,这种更通用,可以用多元素删除。。
         */
//        //第一种方法
        for (Cat cat : set) {
            if ("花花".equals(cat.getName())) {
                set.remove(cat);
                //break;
            }
        }
        //第二种方法
//        it = set.iterator();
//        while (it.hasNext()) {
//            Cat d = it.next();
//            if ("花花".equals(d.getName())) {
//                it.remove();
//               // System.out.println(c);
//            }
//        }

/**
         * 第二次判断,删除年龄小于5的
         * 核心思路是先做一个小集合,再用removeall去做集合减
         */
//        Set<Cat> set1=new HashSet<Cat>();
//        for (Cat cat : set) {
//            if (cat.getMonth()<5) {
//                set1.add(cat);
//            }
//        }
//        set.removeAll(set1);

System.out.println("+++++++++++++++++++++++++++++++++");
        System.out.println("删除花花二代后的数据");
        for (Cat cat : set) {
            System.out.println(cat);
        }
        //删除集合中的所有宠物猫信息
        System.out.println("+++++++++++++++++++++++++++++++++");
        System.out.println("删除所有宠物猫信息");
        //第一种,用set.removeAll()返回的值去判断
        boolean flag1 = set.removeAll(set);
//        if(flag1){
//            System.out.println("猫都不见了...");
           for (Cat cat : set) {
               System.out.println(cat);
           }
//        }else{
//            System.out.println("猫还在");
//        }
        //第二种,删除后用isEmpty()方法去判断
        if (set.isEmpty()) {
            System.out.println("猫都不见了...");
//            for (Cat cat : set) {
//                System.out.println(cat);
//            }
        } else {
            System.out.println("猫还在");
        }
    }

}

感谢慕课网!

java学习4:案例:宠物猫信息管理相关推荐

  1. Java学习(86)Java集合——案例:宠物猫信息管理(HashSet增删改查)

    案例:宠物猫信息管理(HashSet增删改查) 需求分析 1. 功能需求 2. 属性 3. 方法 创建宠物猫Cat类,定义构造方法,定义get/set方法 主方法内定义宠物猫对象,将宠物猫对象放入Ha ...

  2. Java学习路线:day11 客户信息管理软件

    文章目录 转载自atguigu.com视频 客户信息管理软件 需求说明书 软件设计结构 第1步:封装CMUtility工具类 第2步:Customer类的设计 第3步:CustomerList类的设计 ...

  3. Java学习小型案例实战模拟-------播放器管理实战----------Java学习总结

    播放器管理 因为在Java内容当中,我们并没有学习图形界面的内容,所以播放器管理的内容呢都是在控制台来实现的. 需求分析: 播放列表管理: 将歌曲添加到主播放列表(集合) 将歌曲添加到普通播放列表 通 ...

  4. Java学习(90)Java集合排序——Comparator接口介绍、案例:对宠物猫分别按名字升序、年龄降序进行排列

    Java集合排序--Comparator接口介绍.案例:对宠物猫分别按名字升序.年龄降序进行排列 Comparator接口介绍 1. Comparator接口: 2. Comparator接口中的co ...

  5. Java编程语言学习:Java语言基础案例(如求两门课分数之差、三门课平均分、关系运算符作比较)之详细攻略

    Java编程语言学习:Java语言基础案例(如求两门课分数之差.三门课平均分.关系运算符作比较)之详细攻略 目录 Java语言基础案例 1.求两门课分数之差.三门课平均分: 2.关系运算符作比较

  6. 虚拟宠物猫(java)

    package virtualpet; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fil ...

  7. JAVA接口案例(猫和狗、运动员和教练)

    案例:猫和狗 需求:对猫和狗进行训练,他们就可以跳高了,这里加入了跳高功能,请采用抽象类和接口来实现猫和狗的案例,并在测试类中进行测试. 分析: (1)定义接口(Jumpping) 成员方法:跳高() ...

  8. JAVA多态案例(猫和狗)

    案例:猫和狗 需求:请采用多态的思想实现猫和狗的案例,并在测试类中进行测试. 分析: (1)定义动物类(Animal) 成员变量:姓名.年龄: 构造方法:无参.带参 成员方法:get/set方法,吃饭 ...

  9. JAVA抽象类案例(猫和狗)

    案例:猫和狗 需求:请采用抽象类的思想实现猫和狗的案例,并在测试类中进行测试. 分析: (1)定义动物类(Animal) 成员变量:姓名.年龄: 构造方法:无参.带参 成员方法:get/set方法,吃 ...

最新文章

  1. “80后”财富新贵创业秘诀
  2. 如何通过SEO来提升网站转化率?
  3. 通信电子线路期末复习第一章和第二章上
  4. Java-Java中的线程池原理分析及使用
  5. Android中五种常用对话框的使用
  6. showModalDialog弹窗
  7. arm--ldm、stm指令解析
  8. java一个源文件供一个程序_java02 Java源文件范例提供了一个布局合理的Java程序范例 - 下载 - 搜珍网...
  9. 免费直播课|Python数据可视化与科学计算可视化案例分享
  10. 微服务-封装-docker by daysn大雄
  11. Android AlertDialog创建过程详解
  12. 怪物之心无法触发_《勇者斗恶龙 怪兽篇:旅团之心》怪物生方法及生规则研究 - 电玩巴士...
  13. 经典创意slogan大全
  14. matlab求解联名方程组带三角函数的,matlab三角函数方程组
  15. 你是否也陷入了《能力陷阱》?
  16. Ruby与kiba的初学者etl教程
  17. 疯狂星期四,抢980元超值美食卡,尊享超级特价!
  18. 研究第一台电子计算机的过程,世界上第一台计算机诞生的过程
  19. 计算机应用基础在线3,计算机应用基础3(答案).doc
  20. Java中时间格式化(获取指定时间)

热门文章

  1. 服务器性能分析图标工具:nmon_analyser下载链接
  2. 基于php中医药资讯网站管理系统源码获取
  3. 基于SpringBoot的车牌识别系统(附源码和环境部署文档)
  4. 好用的三维绘图软件CREO学习直线
  5. 定积分证明题例题_定积分计算例题和一些关于物理的典型例题
  6. 反恐精英CS服务器架设详解
  7. 余额宝利息是多少对余额宝有何风险吗?
  8. 12306,真不是您想的那么easy—2
  9. linux rm 不释放_【Linux简单实用小命令002】rm -rf,删了文件空间却没释放?教你解锁4种姿势!...
  10. allatori简单使用教程