HashSet储存自定义对象并遍历

本文探讨了HashSet在Java中如何处理重复元素的问题,通过实例演示了默认情况下HashSet如何判断对象是否重复,并提供了通过重写hashCode和equals方法来实现正确去重的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HashSet储存自定义对象并遍历
四个步骤
1创建集合对象(记得加上泛型
2创建自定义对象
3添加自定义对象
4遍历

package com.ys.msjihe18;

import java.util.HashSet;
import java.util.Set;

/*
 * 
 */
public class HashSetDemo02 {
	public static void main(String[] args) {
		
		Set<Student> set = new HashSet<Student>();
		
		Student s1 = new Student("帅帅",21);
		Student s2 = new Student("蓉蓉",20);
		
		set.add(s1);
		set.add(s2);
		
		for (Student st : set) {
			System.out.println(st);
		}
	}
}

class Student{
	String name;
	int age;
	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}
	
	
}

运行结果
在这里插入图片描述
此时一个神奇的现象出现了
加个s3,让它和s2一样
在这里插入图片描述
在这里插入图片描述
Set集合不允许重复,却并没有去重或者报错,为什么?

原因:
在这里插入图片描述
不仅地址值不一样,连Hash值都是不一样的,故被认为是不重复的,就添加进去了

如何改进呢?
首先重写HashCode方法,使其返回Hash值都一样,这样才会进入到下一步比较地址值,
在这里插入图片描述
接着重写equals方法
在这里插入图片描述
这样的话,就能去重了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值