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 + "]";
	}
	
	
}

运行结果
HashSet储存自定义对象并遍历
此时一个神奇的现象出现了
加个s3,让它和s2一样
HashSet储存自定义对象并遍历
HashSet储存自定义对象并遍历
Set集合不允许重复,却并没有去重或者报错,为什么?

原因:
HashSet储存自定义对象并遍历
不仅地址值不一样,连Hash值都是不一样的,故被认为是不重复的,就添加进去了

如何改进呢?
首先重写HashCode方法,使其返回Hash值都一样,这样才会进入到下一步比较地址值,
HashSet储存自定义对象并遍历
接着重写equals方法
HashSet储存自定义对象并遍历
这样的话,就能去重了

相关文章:

  • 2021-12-11
  • 2021-09-15
  • 2021-06-07
  • 2021-08-10
  • 2021-12-08
  • 2022-12-23
  • 2021-12-07
  • 2022-12-23
猜你喜欢
  • 2021-06-24
  • 2022-12-23
  • 2022-02-09
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案