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方法,
这样的话,就能去重了