技术文摘
Java 中 HashSet 集合对自定义对象去重的实现方式
2024-12-31 11:09:57 小编
Java 中 HashSet 集合对自定义对象去重的实现方式
在 Java 编程中,HashSet 是一种常用的集合类型,它不允许存储重复的元素。然而,当处理自定义对象时,要实现 HashSet 对其的去重,需要一些特定的步骤和考虑因素。
自定义对象需要正确重写 hashCode 和 equals 方法。HashCode 方法用于计算对象的哈希值,而 equals 方法用于比较两个对象是否相等。如果这两个方法没有正确实现,HashSet 可能无法准确地识别重复的对象。
例如,假设我们有一个自定义的“Person”类:
public class Person {
private String name;
private int age;
// 构造函数、getter 和 setter 方法
@Override
public int hashCode() {
int result = name.hashCode();
result = 31 * result + age;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || getClass()!= obj.getClass())
return false;
Person other = (Person) obj;
return name.equals(other.name) && age == other.age;
}
}
在上述代码中,hashCode 方法结合了“name”和“age”的特征来计算哈希值,equals 方法则详细比较了两个“Person”对象的属性。
接下来,当我们将自定义的“Person”对象添加到 HashSet 中时:
HashSet<Person> personSet = new HashSet<>();
Person person1 = new Person("Alice", 25);
Person person2 = new Person("Bob", 30);
Person person3 = new Person("Alice", 25);
personSet.add(person1);
personSet.add(person2);
personSet.add(person3);
由于我们正确实现了 hashCode 和 equals 方法,HashSet 能够识别“person1”和“person3”是重复的对象,只会存储其中一个。
需要注意的是,HashCode 方法应该尽量保证不同的对象具有不同的哈希值,以提高 HashSet 的性能。而 equals 方法则必须准确地定义对象相等的条件。
通过正确重写自定义对象的 hashCode 和 equals 方法,我们可以有效地利用 HashSet 集合来实现对自定义对象的去重操作,从而提高程序的效率和准确性。
- CentOS7 配置 Tomcat 启动与停止(借助 systemctl )
- CentOS7 中通过 Systemd 配置 Tomcat 多实例的方法
- 使用 U 盘启动盘(UltraISO)安装原版 Win10 系统的方法
- CentOS 系统误删文件的恢复办法
- CentOS 全版本镜像下载地址汇总
- RedHat 系统中常用重要内核文件讲解
- Win11 硬盘密码设置方法
- 在 CentOS 中用 vsftpd 替代 PureFTPd 的办法
- CentOS 系统时间设置的基本方法汇总
- CentOS 中邮件服务 sendmail 的安装与简易配置
- Win10 系统中 Java JDK 的安装与环境变量配置方法
- Win11 照片查看器消失的解决办法
- CentOS 系统中访问 NTFS 分区的简便途径
- RedHat 系统本地 Yum 源配置的基本方式
- CentOS 内核编译与安装的简单示例分享