在HashSet集合中添加三个Person对象,把姓名相同的人当作同一个人,禁止重复添加。 提示:Person类中定义name和age属性,重写hashCode()方法和equals()方法,针对Pe
题目:
在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相关推荐
- 为什么要重写hashCode()方法和equals()方法以及如何进行重写
一.前言 本篇文章主要探讨的问题有三个: 1.首先我们为什么需要重写hashCode()方法和equals()方法? 2.在什么情况下需要重写hashCode()方法和equals()方法? 3.如何 ...
- 为什么要重写hashcode方法和equals方法
为什么要重写hashcode方法和equals方法 我们可能经常听到说重写equals方法必须重写hashcode方法,这是为什么呢?java中所有的类都是Object的子类,直接上object源码 ...
- Java实现二树杈_HashSet的hashCode方法和equals方法的重写,TreeSet中compareTo方法的重写,Comparator在treeSet中的应用。...
HashSet的hashCode方法和equals方法的重写,TreeSet中compareTo方法的重写,Comparator在treeSet中的应用. HashSet: 首先,hashset底层是 ...
- hashcode()方法和equals()方法
一.hashcode()方法和equals()方法的介绍 Java的基类Object提供了一些方法,其中equals()方法用于判断两个对象是否相等,hashCode()方法用于计算对象的哈希码.eq ...
- Java hashCode()方法和equals()方法
hashCode方法和equals方法之间的关系: equals方法指示其他一个对象和此对象是否相等.在Object类中定义如下: public boolean equals(Object obj) ...
- equalsIgnoreCase()方法和equals()方法
equalsIgnoreCase()方法和equals()方法都是用来比较两个字符串是否相等. equals()方法在使用时严格规定两个字符串之间的大小写, 当字母的大小写或者字母不同时都是返回fal ...
- java中Object和Objects类、toString方法和equals方法介绍
Object类: Object类位于java.lang包中,lang包下的类无需导包就可以使用,object是Java语言中的根类,即所有类的父类.Object中描述的所有方法其子类都可以使用.在对象 ...
- java实现Comparable接口和Comparator接口,并重写compareTo方法和compare方法
原文地址https://segmentfault.com/a/1190000005738975 实体类:java.lang.Comparable(接口) + comareTo(重写方法),业务排序类 ...
- 实现Comparable接口和Comparator接口,并重写compareTo方法和compare方法
实体类:java.lang.Comparable(接口) + comareTo(重写方法),业务排序类 java.util.Comparator(接口) + compare(重写方法). 这两个接口我 ...
最新文章
- (24):(行为型模式) Visitor 访问者模式
- 从源码分析DEARGUI之add_tooltip
- python get请求 url传参_用Python-get方法向页面发起请求,参数传不进去是怎么回事...
- 常见web漏洞验证攻略(萌新入坑必备!)
- C#阻塞队列BlockingCollection
- d3设置line长度_万物皆可Embedding之LINE算法解读
- 动态分区添加的新字段无法插入数据
- Java学习笔记10---访问权限修饰符如何控制成员变量、成员方法及类的访问范围...
- # 20155224 实验四 Android程序设计
- Linux之touch命令
- [JUC-1]并发包实现及线程状态
- 拓端tecdat|HAR-RV-J与递归神经网络(RNN)混合模型预测和交易大型股票指数的高频波动率
- vivado 2017.4安装教程
- CSDM发布文章“请勿使用默认标题”
- 8位可控加减法电路设计
- 有理数加法C语言pta,有理数
- 记一个docker网络问题--network=host
- Scheme 语言 第一次的感触!
- Ubuntu系统查询本地IP
- 运筹说 第29期 | 对偶理论与灵敏度分析—影子价格
热门文章
- 英特尔发布重大技术架构的改变和创新,面向CPU、GPU和IPU
- 宠物店小程序开发线上预约寄养洗护商城
- 图片瀑布流差异化设计尝试
- jssip+webRtc+freeswitch 实现web端语音通话
- 【总结】云集各大高校 — 数学建模经验分享(万字总结)
- ubuntu安装输入法----小企鹅输入法
- Kettle构建Hadoop ETL实践(六):数据转换与装载
- HTML5中国象棋游戏(自定义象棋难度)源码下载
- 简单工厂模式--女娲造人造啥做啥
- 计算机丢失mfc120u.dll,win10系统打开mindmanager软件提示mfc120u.dll丢失如何解决