韩顺平 HashSet 课后练习 2

题目如下:

按照要求简单写了一下,将Employee和MyDate类都重写了equals方法和hashCode方法

package com.SetExercise;import org.junit.Test;import java.util.Date;
import java.util.HashSet;
import java.util.Objects;/*** @author 心向阳光的天域* @date 2022/10/7 15:19*/
public class Employee02 {@Testpublic void getPerson() {HashSet hashSet = new HashSet();hashSet.add(new Employ("小明", 10000.88d, new MyDate("1996", "01", "01")));// 姓名一样,出生年份不同hashSet.add(new Employ("小明", 10001.88d, new MyDate("1997", "01", "01")));// 出生年份和工资不同hashSet.add(new Employ("小明", 10001.88d, new MyDate("1998", "01", "01")));// 工资和第一个比不同(按照规则,这个应该不展示)hashSet.add(new Employ("小明", 10002.88d, new MyDate("1996", "01", "01")));// 重写了toString()方法,这里可以遍历一下,看看值System.out.println("size:" + hashSet.size());for (Object o : hashSet) {System.out.println(o);}}
}class Employ {private String name;private double sal;private MyDate birthday;public Employ(String name, double sal, MyDate birthday) {this.name = name;this.sal = sal;this.birthday = birthday;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Employ employ = (Employ) o;return Objects.equals(name, employ.name) && Objects.equals(birthday, employ.birthday);}@Overridepublic int hashCode() {return Objects.hash(name, birthday);}@Overridepublic String toString() {return "Employ{" +"name='" + name + '\'' +", sal=" + sal +", birthday=" + birthday +'}';}
}class MyDate {String year;String month;String day;public MyDate(String year, String month, String day) {this.year = year;this.month = month;this.day = day;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;MyDate myDate = (MyDate) o;return Objects.equals(year, myDate.year) && Objects.equals(month, myDate.month) && Objects.equals(day, myDate.day);}@Overridepublic int hashCode() {return Objects.hash(year, month, day);}@Overridepublic String toString() {return "MyDate{" +"year='" + year + '\'' +", month='" + month + '\'' +", day='" + day + '\'' +'}';}
}

输出结果如下:

看了视频的弹幕,有小伙伴说可以只重写一次equals和hashCode方法,于是我就试了试发现真的可以。相应的话就需要给MyDate类增加set和get方法。

package com.SetExercise;import org.junit.Test;import java.util.Date;
import java.util.HashSet;
import java.util.Objects;/*** @author 心向阳光的天域* @date 2022/10/7 15:19*/
public class Employee02 {@Testpublic void getPerson() {HashSet hashSet = new HashSet();hashSet.add(new Employ("小明", 10000.88d, new MyDate("1996", "01", "01")));hashSet.add(new Employ("小明", 10001.88d, new MyDate("1997", "01", "01")));hashSet.add(new Employ("小明", 10001.88d, new MyDate("1998", "01", "01")));// 按照重复数据去重hashSet.add(new Employ("小明", 10002.88d, new MyDate("1996", "01", "01")));System.out.println("size:" + hashSet.size());for (Object o : hashSet) {System.out.println(o);}}
}class Employ {private String name;private double sal;private MyDate birthday;public Employ(String name, double sal, MyDate birthday) {this.name = name;this.sal = sal;this.birthday = birthday;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Employ employ = (Employ) o;return Objects.equals(name, employ.name)// 这里直接重写一次equals方法即可&& Objects.equals(birthday.getYear(), employ.birthday.getYear())&& Objects.equals(birthday.getMonth(), employ.birthday.getMonth())&& Objects.equals(birthday.getDay(), employ.birthday.getDay());}@Overridepublic int hashCode() {// 这里直接重写一次hashCode方法即可return Objects.hash(name, birthday.year, birthday.month, birthday.day);}@Overridepublic String toString() {return "Employ{" +"name='" + name + '\'' +", sal=" + sal +", birthday=" + birthday +'}';}
}class MyDate {String year;String month;String day;public MyDate(String year, String month, String day) {this.year = year;this.month = month;this.day = day;}public String getYear() {return year;}public void setYear(String year) {this.year = year;}public String getMonth() {return month;}public void setMonth(String month) {this.month = month;}public String getDay() {return day;}public void setDay(String day) {this.day = day;}@Overridepublic String toString() {return "MyDate{" +"year='" + year + '\'' +", month='" + month + '\'' +", day='" + day + '\'' +'}';}
}

发现也是可以的,并且输出结果相同。

还有小伙伴说可以用成员内部类和匿名内部类的,如果有用这两种方法的欢迎评论区贴出代码交流,主要我没想明白MyDate类如何运用内部类。可以一起交流共同探讨。

韩顺平 HashSet 课后练习 2相关推荐

  1. java韩顺平HashSet课后练习2

    import java.util.HashSet; import java.util.Objects;@SuppressWarnings({"all"}) public class ...

  2. 韩顺平集合课后作业Homework06.java探讨

    看了韩顺平老师的视频获益匪浅,但是这里有点不太懂,希望会的大神能帮助解答一下.第二次输出前的:set.add(new Person(1001,"CC"));为啥能add进HashS ...

  3. 尚硅谷Java数据结构和java算法,韩顺平数据结构和算法课后作业01

    尚硅谷Java数据结构和java算法,韩顺平数据结构和算法课后作业第一题 要求: 1)在前面的基础上,将稀疏数组保存到磁盘上,比如map.data 2) 恢复原来的数组时,读取map.data进行恢复 ...

  4. 韩顺平Java学习 泛型

    目录 一.泛型的语法 1.传统的方法遍历集合存在的问题 2.使用泛型来解决传统集合添加元素带来的问题 3.泛型使用介绍 4.泛型的使用细节 5.泛型课堂练习 二.自定义泛型 1.自定义泛型类的规范 ​ ...

  5. Java学习(java基础)-韩顺平老师

    一.简单介绍 1.jdk.jre 2.Java代码规范 a.类.方法的注释,要以javadoc的方式来写 /** *@author:楠小弟 *@version:1.0 */ public class ...

  6. JavaStudy4(集合+泛型)—B站韩顺平

    JavaStudy4(集合+泛型)-B站hsp 1.集合 1.1 集合的理解和好处 ​ 前面我们保存多个数据使用的是数组,那么数组有不足的地方,我们分析一下 1.1.1 数组 1.1.2 集合 1.2 ...

  7. 韩顺平循序渐进学java 第21.22.23.24讲 集合

    21.1 引出问题 一个问题? 前面我们学习了数组,充分体会到数组的优越性,就是可以存储同一类型的数据,但是我们假设有这样的需求,大家看看如何解决? 请做一个公司职员薪水管理系统,要求完成如下功能: ...

  8. servletjsp入门.....韩顺平笔记

    u 背景知识介绍 J2EE的13种技术 java->servlet->jsp [技术总是有一个演变过程] zip粘贴到word设置 u 回顾一下我们现有的技术 java 基础(面向对象,集 ...

  9. 【尚硅谷|韩顺平】数据结构和算法

    文章目录 前言: 数据结构和算法 数据结构和算法的概述 数据结构和和算法的关系 数据结构 线性结构和非线性结构 非线性结构 稀疏 sparsearray 数组 基本介绍: 稀疏数组的处理方法是: 应用 ...

最新文章

  1. python游戏中调整箭头下落速度_入门 | 三行Python代码,让数据预处理速度提高2到6倍...
  2. R语言协方差分析(analysis of covariance)实战:协方差分析ANCOVA(analysis of covariance)(检查模型假设)、拟合协方差分析ANCOVA模型、事后分析
  3. Python 数据结构视频教程三
  4. Jenkins之Pipeline流水线构建项目
  5. 日志处理--高效Linux命令整理
  6. 检索数据_1_从表中查询所有行和列
  7. 《Ceph源码分析》——第1章,第一节Ceph的发展历程
  8. SpriteBuilder中的粒子系统属性
  9. 玩个锤子,李飞飞夫妇团队的最新研究
  10. Android 图片文件操作、屏幕相关、.9图片的理解
  11. 0018-大数据售前的中年危机
  12. python pos函数_从0入门Python — 4. 函数
  13. 关于form提交后展示遮罩及显示进度条gif问题
  14. 黑马程序员顺义校区php_传智播客·黑马程序员顺义新校区来校路线介绍
  15. Java之映射(map)
  16. java电力巡检项目讲解,电力巡检-东软平台产品官网
  17. 呼吸灯verilog实现
  18. 20220326-代码日记-Unity画符
  19. MySQL设置索引used in key specification without a key length
  20. VS2017 和 Matlab R2016b 混合编程配置问题解决!

热门文章

  1. 为什么Java能这么流行
  2. CSS自定义鼠标样式
  3. PHP程序猿必知的24个库
  4. Python-Django毕业设计调查问卷及调查数据统计系统(程序+Lw)
  5. 关于图片的像素、分辨率、尺寸问题的解答,以及显示器的显示大小。
  6. 第二届全国强网杯Web 题three hit学习心得(伪write up)
  7. 实现一个冒泡提示的浮点数编辑框
  8. Mybatis核心源码赏析(二)
  9. 给自己的网站集成搜索引擎收录查询功能
  10. [js高手之路] dom常用API【appendChild,insertBefore,removeChild,replaceChild,cloneNode】详解与应用...