首页 > 其他分享 >HashSet保证元素唯一性原理的探索、总结

HashSet保证元素唯一性原理的探索、总结

时间:2024-03-12 18:33:25浏览次数:22  
标签:唯一性 探索 HashSet 对象 元素 equals 哈希 方法 码值

HashSet存储自定义类型的元素
发现没有对相同的对象进行去重,没有保证元素的唯一性

HashSet保证元素唯一性原理的探索
对自定义类型的元素没有去重成功,考虑没有重写equals方法,去重时候,使用的是地址值来比较多个元素是否重复,考虑重写equals方法
重写equals方法之后,发现没有去重成功,在equals方法中写了打印语句,发现没用
考虑使用了HashSet,和hashCode方法有关
hashCode的实现原则:
1、同一个对象,多次调用hashCode方法,【必须】返回相同的哈希码值

2、使用equals方法判断两个对象相等,那么这两个对象的hashCode返回值【必须】一样(如果两个对象的哈希码值不相等,一定说明使用equals比较两个对象也不相等)

3、使用equals方法判断两个对象不相等,那么这两个对象的hashCode【尽量】不相同(如果两个对象的hashCode相同,不能说明两个对象就是相同的)

4、Object类型可以根据不同的对象确实生成不同的哈希码值(对于Object类型,只要有不同的哈希码值,就一定说明两个对象是不相同的)

5、由于equals方法都没有被调用,怀疑每个对象生成了不同的哈希码值,系统认为都是不同的对象,就不再使用equals方法比较了

6、将所有Person对象都重写成返回相同的哈希码值,系统就无法判断各个对象是否相等了,就只能依靠equals方法来判断

7、发现重写hashCode方法之后,equals方法被调用,set集合去重成功

HashSet保证元素唯一性原理的总结
希望存储一个对象时,计算该对象的哈希码值,和集合中已经存在的元素的哈希码值比较:(1)没有任何一个元素的哈希码值和当前对象的哈希码值相同;(2)部分元素的哈希码值和当前对象的哈希码值相同
如果(1),直接将当前元素存储到集合中
如果是(2),将和当前对象哈希码值的元素,依次和当前对象比较equals方法:(1)没有任何元素的equals方法返回true,那么这个对象就可以存储到集合找那个;(2)有一些元素的equals方法返回了true,那么就说明是一个重复的元素,就不存储当前对象了。
保证元素唯一性原理的图示:


哈希存储的原理
图示:
结论:
1、如果一个类所有的对象都有相同的哈希值,使用哈希存储就相当于退化成了一个链式存储

2、为了提升效率,应该让不同的对象,尽量有不同的哈希值

3、哈希方法的重写方式

1、尽量根据对象的属性值不同,生成不同的哈希值

2、操作:使用eclipse中的快捷键,alt + shift + s h

标签:唯一性,探索,HashSet,对象,元素,equals,哈希,方法,码值
From: https://www.cnblogs.com/zhaoshengfu/p/18068982

相关文章

  • 探索Flutter中的模糊毛玻璃滤镜效果:ImageFilter介绍使用和深入解析
    在Flutter中,模糊效果不仅可以增加应用的视觉吸引力,还可以用于多种场景,如背景模糊、图像处理等。通过BackdropFilter和ImageFilter.blur,Flutter使得添加和调整模糊效果变得异常简单。本文将深入探讨如何在Flutter中实现动态模糊效果,并通过TileMode参数调整模糊效果的边缘行为......
  • 探索PyTorch:介绍及常用工具包展示
    前言PyTorch作为一个强大的开源深度学习框架,近年来在科学计算和人工智能领域备受欢迎。它提供了灵活的张量计算和动态计算图的功能,使得构建和训练深度神经网络变得更加简单和高效。本文将介绍PyTorch的基本概念,并展示一些常用的PyTorch工具包,帮助读者更好地了解和利用PyTorch进......
  • 深入探索Spring注入:解锁@Autowired与构造器注入的秘密
    好久没有写JAVA了今天突然看到Sonarlint的提示  什么??竟然不推荐这样写?难道我一直写的都是错的??所以我深入了解了一下为什么要我改成构造函数注入在Spring框架中,依赖注入(DI)是一种核心功能,它允许对象通过构造函数、setter方法或字段直接定义其依赖关系。这里,我们专注于两种......
  • 跨端轻量JavaScript引擎的实现与探索
    一、JavaScript1.JavaScript语言JavaScript是ECMAScript的实现,由ECMA39(欧洲计算机制造商协会39号技术委员会)负责制定ECMAScript标准。ECMAScript发展史:时间版本说明1997年7月ES1.0发布当年7月,ECMA262标准出台1998年6月ES2.0发布该版本修改完全符合ISO......
  • Java HashMap 和 HashSet 的高效使用技巧
    JavaHashMapHashMap是一种哈希表,它存储键值对。键用于查找值,就像数组中的索引一样。HashMap的优势在于它可以使用任何类型作为键,并且查找速度很快。创建HashMap//导入HashMap类importjava.util.HashMap;publicclassMain{publicstaticvoidmain(String[]a......
  • SqlServer 多叉树字典表设计最佳实践探索
    目录多叉树设计需求设计思路方案一、范式设计(双表方案)字典表+闭包表+ParantId+路径枚举适用范围优点缺点D_Dictionary_FirstPlan字典表设计图D_Dictionary_FirstPlan字典表模型图D_Dictionary_FirstPlan字典表数据展示D_Dictionary_FirstPlan_Closure闭包表设计图D_Dictionary_F......
  • 7月13日《罗布乐思》全平台开放,一起探索无限世界
    首页开发者玩家教育 新闻7月13日《罗布乐思》全平台开放,一起探索无限世界罗布乐思2021-07-1222:43:56 7月13日,《罗布乐思》正式全平台开放。登录安卓端及IOS端,即可探索《罗布乐思》的无限世界。 《罗布乐思》是集体验、开发于一体的多人在线3D创意社区,......
  • 探索AI的边界:如何精准地测试人工智能
    在当今数字化时代,人工智能(AI)技术已经成为我们生活中不可或缺的一部分。然而,要构建出可信赖的AI系统并非易事。这需要我们不仅深入理解人工智能的核心原理,还需要将这些理论知识应用到实际场景中。为了帮助大家系统地掌握人工智能的核心原理及在实际中的应用场景,我们特别推出了如何......
  • "探索未来智能:AI技术一网打尽!"(推荐收藏)
    星心AI(kk.zlrxjh.top)在信息技术的海洋中,一颗新星正在冉冉升起,名为星心AI。这项技术结合了星辰大模型与心灵大模型的精髓,创造出一种知识增强型的大语言模型,专门服务于自然语言处理(NLP)这一领域的前沿技术探索。星心AI携带着对语言的深刻理解和生成的能力,轻松驾驭各种复杂的自然语......
  • 探索数据结构:单链表的实战指南
    ✨✨欢迎大家来到贝蒂大讲堂✨✨......