HashSet集合数据的结构、HashSet存储自定义元素
HashSet集合数据的结构
我们来画一张图来解释:
Set集合存储元素不重复的原理
public class HashSet2 {
public static void main(String[] args) {
HashSet<Integer> set = new HashSet<>();
// 存储2相同的遍历输出一下
set.add(1);
set.add(1);
set.add(2);
set.add(3);
for (Integer integer : set) {
System.out.println(integer);
}
}
}
看一下结果:
画个图来看一下他的存储结构
)
这就是存储的原理
HashSet存储自定义元素
set集合报错元素唯一:
存储 的元素(String Student .....)
要求:
同名同年龄的人,视为同一个人,只能存储一次,必须重写HashCode方法和equals方法
案例:
public static void main(String[] args) {
/*
* set集合报错元素唯一:
存储 的元素(String Student .....)
要求:
同名同年龄的人,视为同一个人,只能存储一次,必须重写HashCode方法和equals方法*/
HashSet<Student> set = new HashSet<>();
Student student = new Student("王老虎", 37);
Student student1 = new Student("王老虎", 37);
Student student2 = new Student("王老汉", 88);
set.add(student);
set.add(student1);
set.add(student2);
for (Student student3 : set) {
System.out.println(student3);
}
}
}
我们来先一个问题
这个两个元素重复了为啥还打印输出了呢??
打印地址值看一下:
System.out.println(student.hashCode());
System.out.println(student1.hashCode());
地址不同
那么如果我们要i想不出先重复元素
就需要在实体类 重写HashCode方法和equals方法
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age &&
Objects.equals(name, student.name);
}
然后我们在测试看一下:
可以看出没有重复元素了 地址值也变成相同的了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY