题目:
在HashSet集合中添加三个Person对象,把姓名相同的人当作同一个人,禁止重复添加。
提示:Person类中定义name和age属性,重写hashCode()方法和equals()方法,针对Person类的name属性进行比较,
如果name相同,hashCode()方法的返回值相同,equals()方法返回true

解题思路
我们要知道,Set接口数据不可以重复,有序排序,添加数据的有3种方式

前面没有其他元素,可以直接添加
hash值不同,直接添加
hash值相同,但equals不同,可以直接添加

根据题目需求,把姓名相同的人当作同一个人,禁止重复添加。因此equals()根据姓名进行判断、不需要同时判断姓名还有年龄
重写的hashCode()和equals()的都改一下。

 代码实现

一、实体类

import java.util.Objects;public class Person {private String name;private int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}//hashCode和equals进行name的比较就好了@Overridepublic boolean equals(Object o) {if (this == o)return true;if (!(o instanceof Person))return false;Person person = (Person) o;return person.name.equals(this.name);}@Overridepublic int hashCode() {return Objects.hash(getName());}
}

二、入口

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;public class TestPerson {public static void main(String[] args) {Set<Person> set = new HashSet<>();set.add(new Person("张三", 20));set.add(new Person("李四", 23));set.add(new Person("王五", 22));set.add(new Person("张三", 21));Iterator<Person> iterator = set.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}}
}

运行结果

在HashSet集合中添加三个Person对象,把姓名相同的人当作同一个人,禁止重复添加。 提示:Person类中定义name和age属性,重写hashCode()方法和equals()方法,针对Pe相关推荐

  1. 为什么要重写hashCode()方法和equals()方法以及如何进行重写

    一.前言 本篇文章主要探讨的问题有三个: 1.首先我们为什么需要重写hashCode()方法和equals()方法? 2.在什么情况下需要重写hashCode()方法和equals()方法? 3.如何 ...

  2. 为什么要重写hashcode方法和equals方法

    为什么要重写hashcode方法和equals方法 我们可能经常听到说重写equals方法必须重写hashcode方法,这是为什么呢?java中所有的类都是Object的子类,直接上object源码 ...

  3. Java实现二树杈_HashSet的hashCode方法和equals方法的重写,TreeSet中compareTo方法的重写,Comparator在treeSet中的应用。...

    HashSet的hashCode方法和equals方法的重写,TreeSet中compareTo方法的重写,Comparator在treeSet中的应用. HashSet: 首先,hashset底层是 ...

  4. hashcode()方法和equals()方法

    一.hashcode()方法和equals()方法的介绍 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码.eq ...

  5. Java hashCode()方法和equals()方法

    hashCode方法和equals方法之间的关系: equals方法指示其他一个对象和此对象是否相等.在Object类中定义如下: public boolean equals(Object obj) ...

  6. equalsIgnoreCase()方法和equals()方法

    equalsIgnoreCase()方法和equals()方法都是用来比较两个字符串是否相等. equals()方法在使用时严格规定两个字符串之间的大小写, 当字母的大小写或者字母不同时都是返回fal ...

  7. java中Object和Objects类、toString方法和equals方法介绍

    Object类: Object类位于java.lang包中,lang包下的类无需导包就可以使用,object是Java语言中的根类,即所有类的父类.Object中描述的所有方法其子类都可以使用.在对象 ...

  8. java实现Comparable接口和Comparator接口,并重写compareTo方法和compare方法

    原文地址https://segmentfault.com/a/1190000005738975 实体类:java.lang.Comparable(接口) + comareTo(重写方法),业务排序类 ...

  9. 实现Comparable接口和Comparator接口,并重写compareTo方法和compare方法

    实体类:java.lang.Comparable(接口) + comareTo(重写方法),业务排序类 java.util.Comparator(接口) + compare(重写方法). 这两个接口我 ...

最新文章

  1. (24):(行为型模式) Visitor 访问者模式
  2. 从源码分析DEARGUI之add_tooltip
  3. python get请求 url传参_用Python-get方法向页面发起请求,参数传不进去是怎么回事...
  4. 常见web漏洞验证攻略(萌新入坑必备!)
  5. C#阻塞队列BlockingCollection
  6. d3设置line长度_万物皆可Embedding之LINE算法解读
  7. 动态分区添加的新字段无法插入数据
  8. Java学习笔记10---访问权限修饰符如何控制成员变量、成员方法及类的访问范围...
  9. # 20155224 实验四 Android程序设计
  10. Linux之touch命令
  11. [JUC-1]并发包实现及线程状态
  12. 拓端tecdat|HAR-RV-J与递归神经网络(RNN)混合模型预测和交易大型股票指数的高频波动率
  13. vivado 2017.4安装教程
  14. CSDM发布文章“请勿使用默认标题”
  15. 8位可控加减法电路设计
  16. 有理数加法C语言pta,有理数
  17. 记一个docker网络问题--network=host
  18. Scheme 语言 第一次的感触!
  19. Ubuntu系统查询本地IP
  20. 运筹说 第29期 | 对偶理论与灵敏度分析—影子价格

热门文章

  1. 英特尔发布重大技术架构的改变和创新,面向CPU、GPU和IPU
  2. 宠物店小程序开发线上预约寄养洗护商城
  3. 图片瀑布流差异化设计尝试
  4. jssip+webRtc+freeswitch 实现web端语音通话
  5. 【总结】云集各大高校 — 数学建模经验分享(万字总结)
  6. ubuntu安装输入法----小企鹅输入法
  7. Kettle构建Hadoop ETL实践(六):数据转换与装载
  8. HTML5中国象棋游戏(自定义象棋难度)源码下载
  9. 简单工厂模式--女娲造人造啥做啥
  10. 计算机丢失mfc120u.dll,win10系统打开mindmanager软件提示mfc120u.dll丢失如何解决