同过对hash值和equal方法的控制来实现要求
package com.hspedu;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Objects;
/**
* @author: guorui fu
* @versiion: 1.0
*/
@SuppressWarnings({"all"})
public class HashSetExercise02 {
public static void main(String[] args) {
HashSet hashSet = new HashSet();
hashSet.add(new Employee_("jack",2500,new MyDate(1995,5,9)));
hashSet.add(new Employee_("marry",3000,new MyDate(1999,3,1)));
hashSet.add(new Employee_("jack",3005,new MyDate(1995,5,9)));
Iterator iterator = hashSet.iterator();
while (iterator.hasNext()) {
Object employee = iterator.next();
System.out.println(employee);
}
}
}
/*
定义一个Employee类,该类包含:private成员属性name,sal,birthday
(MyDate)类型,其中birthday为MyDate类型(属性包括:year,month,day),
1.创建3个Employee放入HashSet中
2.当name 和birthday的值相同时,认为是相同员工,不能添加到HashSet集合中
*/
class Employee_ {
private String name;
private double sal;
private MyDate birthday;
public Employee_(String name, double sal, MyDate birthday) {
this.name = name;
this.sal = sal;
this.birthday = birthday;
}
@Override
public String toString() {
return "姓名:" + name +
" 薪水:" + sal +
" 生日:" + birthday;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Employee_ employee_ = (Employee_) o;
return Objects.equals(name, employee_.name) &&
Objects.equals(birthday, employee_.birthday);
}
@Override
public int hashCode() {
return Objects.hash(name, birthday);
}
}
class MyDate {
private int year;
private int month;
private int day;
public MyDate(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
@Override
public String toString() {
return year + " "
+ month + " "
+ day;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyDate myDate = (MyDate) o;
return year == myDate.year &&
month == myDate.month &&
day == myDate.day;
}
@Override
public int hashCode() {
return Objects.hash(year, month, day);
}
}