JDK - 17/18
IDE - idea
package HashSet_Test;
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
// TODO HashSet 无序 不重复
// 创建HashSet对象
HashSet set = new HashSet();
// 创建User对象
User user1 = new User();
user1.id = 1001;
user1.name = "zhangsan";
User user2 = new User();
user2.id = 1001;
user2.name = "zhangsan";
User user3 = new User();
user3.id = 1002;
user3.name = "lisi";
// 把User对象添加到HashSet中
set.add(user1);
set.add(user2);
set.add(user3);
// 打印HashSet
System.out.println(set);
}
}
class User {
public int id;
public String name;
@Override
// 重写toString 如果不重写toString 打印的是地址
public String toString() {
// return super.toString();
return "User[" + id + ", " + name + "]";
}
@Override
// 类似于内存地址
// 重写hashCode 不重写hashCode的话 比较的是内存地址 直接判断是不同的对象 也会出现两个zhangsan
public int hashCode() {
// return super.hashCode();
return id;
}
@Override
// 重写equals 如果不重写 将出现两个zhangsan
public boolean equals(Object obj) {
// return super.equals(obj);
// 首先判断对象是否是User
if ( obj instanceof User ) {
User user = (User) obj;
// 然后判断id是否相等
if ( user.id == this.id ) {
// 最后判断name是否相等
if ( user.name.equals(this.name) ) {
return true;
}
}
return false;
}
return false;
}
}
运行结果
"C:\Program Files\Java\jdk-17\bin\java.exe" "-javaagent:C:\Program Files\JetBrains(Com)\IntelliJ IDEA Community Edition 2022.2.2\lib\idea_rt.jar=60788:C:\Program Files\JetBrains(Com)\IntelliJ IDEA Community Edition 2022.2.2\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\86139\Desktop\java\java-learning-test\out\production\java-learning-test HashSet_Test.Test
[User[1001, zhangsan], User[1002, lisi]]
Process finished with exit code 0