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);
}

然后我们在测试看一下:

  

 

 可以看出没有重复元素了 地址值也变成相同的了

  

posted @   一位程序袁  阅读(68)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示