HashSet存储自定义对象保证元素唯一性图解原理及代码优化

HashSet存储自定义对象保证元素唯一性图解原理及代码优化

1.原理:

 * 1.HashSet原理
      * 我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比较,
        效率较低,哈希算法提高了去重复的效率, 降低了使用equals()方法的次数
   * 当HashSet调用add()方法存储对象的时候, 先调用对象的hashCode()方法得到一个哈希值, 然后在集合中查找是否有哈希值相同的对象
     * 如果没有哈希值相同的对象就直接存入集合
      * 如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较,比较结果为false就存入, true则不存
     * 2.将自定义类的对象存入HashSet去重复
     * 类中必须重写hashCode()和equals()方法
    * hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同(提高效率)
    * equals(): 属性相同返回true, 属性不同返回false,返回false的时候存储

2.示例:

在新定义的Person类中重写hashCode()和equals()方法

尽量使属性值的哈希值不同,尽可能减少调用equals()方法

 

/*
* hashCode()方法返回属性的哈希值,如果相同要调用equals()方法
* 用这个方法减少调用equals()的次数
* */

/*为什么是31?
* 1.31是一个质数只能被1和本身整除
* 2.31既不大也不小
* 3.31好算=2的五次方-1
* */

public class Person implements Comparable<Person>{String name;int age;public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}@Overridepublic int compareTo(@NotNull Person o) {int num=this.name.compareTo(o.name);return num==0?this.age-o.age:num;}@Overridepublic boolean equals(Object o) {   //健壮性判断if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;if (age != person.age) return false;return name != null ? name.equals(person.name) : person.name == null;}@Overridepublic int hashCode() {/** hashCode()方法返回属性的哈希值,如果相同要调用equals()方法* 用这个方法减少调用equals()的次数* *//*为什么是31?* 1.31是一个质数只能被1和本身整除* 2.31既不大也不小* 3.31好算=2的五次方-1* */int result = name != null ? name.hashCode() : 0;result = 31 * result + age;return result;}@Overridepublic String toString() {return "Person{" +"name='" + name + '\'' +", age=" + age +'}';}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}HashSet<Person> hs = new HashSet<>();hs.add(new Person("张三", 23));           //new Person()每一次的地址不一样,对象不同hs.add(new Person("张三", 23));hs.add(new Person("李四", 23));hs.add(new Person("李四", 23));hs.add(new Person("王五", 23));hs.add(new Person("赵六", 23));hs.add(new Person("张三", 23));hs.add(new Person("李四", 23));hs.add(new Person("李四", 23));hs.add(new Person("王五", 23));hs.add(new Person("赵六", 23));System.out.println(hs);

2.图解

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/482105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

马斯克:推特发帖机器人太多,现在起搁置440亿美元收购

来源&#xff1a;智能研究院前言直播「尽职调查」&#xff0c;压价还是打退堂鼓&#xff1f;「因为现在要计算推特上虚假账号的数量是否占 5% 以下&#xff0c;所以推特的收购暂时被搁置了&#xff0c;」5 月 13 日晚&#xff0c;全球首富伊隆 马斯克突然发推说道。马斯克与推…

Web 3.0?高成本版的P2P而已

来源&#xff1a;AI前线作者&#xff1a;Marcel Waldvogel译者&#xff1a;核子可乐策划&#xff1a;钰莹最近&#xff0c;Web 3.0 火的不行&#xff0c;有人认为&#xff0c;它将是互联网的未来式&#xff0c; Web 3.0 代表着对互联网的根本性改造&#xff0c;一个新的 Web 世…

JAVA面试题:HashMap和Hashtable的区别

HashMap和Hashtable的区别 1.共同点:都是双列集合,底层都是哈希算法 2.区别: * 1.HashMap是线程不安全的&#xff0c;效率高&#xff0c;JDK1.2版本 * Hashtable是线程安全的&#xff0c;效率低&#xff0c;JDK1.0版本 * 2.HashMap可以存储null键和null值 * Hashtable不可以存…

CICC城市大脑术语规范术语与定义征集

2022年2月&#xff0c;《城市大脑系列建设标准规范》项目由中国指挥与控制学会&#xff08;CICC&#xff09;正式启动&#xff0c;4月14日通过立项评审&#xff0c;根据城市大脑标准的前期工作和中国指挥与控制学会《城市大脑系列建设标准规范》立项会的专家意见&#xff0c;形…

最短路径——迪杰斯特拉算法——图的数据结构

最短路径是在工程上经常用到的概念&#xff0c;在这里给出了从单源点到任意顶点的迪杰斯特拉算法。 先来看看基本概念&#xff1a; 用代码C语言实现如下&#xff1a; #include<string.h>#include<ctype.h>#include<malloc.h> /* malloc()等 */#include<…

盖亚假说:地球是一个生命体吗?

来源&#xff1a;微信公众号“集智俱乐部”原文&#xff1a;Is the Earth an organism?https://aeon.co/essays/the-gaia-hypothesis-reimagined-by-one-of-its-key-sceptics。撰文&#xff1a;W Ford Doolittle翻译&#xff1a;Leo审校&#xff1a;赵雨亭在漫长的地球生物的演…

拓扑排序和关键路径

一&#xff1a;拓扑排序 前面讲过拓扑排序只是简单的描述&#xff0c;下面具体的实现。 用顶点表示活动&#xff0c;用弧表示活动间的优先关系的有向图为AOV网。 AOV网中没有环&#xff0c;检测的办法是进行拓扑排序。 步骤&#xff1a; (1)在有向图中选一个没有前驱的顶点…

Science:睡眠医学的突破,大脑会在梦境中巩固积极情绪

来源&#xff1a;学术头条处理情绪&#xff0c;特别是区分危险和安全&#xff0c;对动物的生存至关重要。在人类中&#xff0c;过度的负面情绪&#xff0c;如恐惧反应和焦虑状态&#xff0c;会导致创伤后应激障碍&#xff08;PTSD&#xff09;等病理状态。在欧洲&#xff0c;就…

RISC-V可能不会威胁英特尔,但Arm需警惕

来源&#xff1a;EETOP近期&#xff0c;国外媒体The Register对RISC-V International 首席执行官Calista Redmond 进行了一次采访&#xff0c;在访谈中&#xff0c;Calista Redmond谈及英特尔不太担心自己的x86业务&#xff0c;因此成为了RISC-V ISA联盟的白金会员。Redmond还谈…

超越 GPT-3,DeepMind 推出新宠 Gato,却被质疑“换汤不换药”?

出品&#xff1a;CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;整理&#xff1a;慧中 责编&#xff1a;屠敏受大规模语言建模的启发&#xff0c;Deepmind应用类似的方法构建了一个单一的「通才」智能体 Gato&#xff0c;它具有多模态、多任务、多具身&#xff08;…

拓扑排序和关键路径课程设计

目录 1. 设计任务书... 3 1.1设计任务... 3 1.2程序功能... 3 1.3运行环境... 3 2. 本组课题... 3 2.1课题... 3 2.2本人任务... 3 3.程序功能简介... 4 3.1拓扑排序算法分析... 4 3.2关键路径算法分析... 4 4.功能实现分析... 5 4.1拓扑排序功能... 5 4.1.…

2万字超长干货,MIT人工智能实验室:如何做研究?

来源&#xff1a;人工智能前沿讲习译者&#xff1a;柳泉波 北京师范大学信息学院2000级博士生 当你初入江湖&#xff0c;迷茫不知道该干什么的时候&#xff0c;不妨去模仿前人是如何进行科研的&#xff0c;并从中归纳出最适合自己的道路。为此&#xff0c;我们推出“学术人生”…

重磅!DeepMind新作Gato:一个模型、一套权重通吃600+视觉文本和决策任务!

来源&#xff1a;量子位&#xff08;QbitAI&#xff09;作者&#xff1a;梦晨 鱼羊通用人工智能&#xff0c;还得看DeepMind。这回&#xff0c;只一个模型&#xff0c;使用相同的权重&#xff0c;不仅把看家本领雅达利游戏玩得飞起。和人类聊聊天、看图写话也不在话下。甚至还能…

WEB3.0是营销概念?能否代表科技未来趋势的主流

来源&#xff1a;刘锋科学网博客作者 &#xff1a;刘锋链接地址&#xff1a;https://blog.sciencenet.cn/blog-39263-1339334.html本文是根据微信交流的内容整理形成&#xff0c;算是一个随笔&#xff0c;反映了个人的一些观点&#xff0c;未必正确&#xff0c;仅供参考。根据目…

JDKjavac的配置

Path变量&#xff0c;一定要写绝对路径名&#xff0c;不要写相对路径名&#xff0c;写本地的jdk的bin目录和jdk中jre的bin目录&#xff0c;这个win10做的很好&#xff0c;直接写就可以&#xff0c;用不同的变量代替了一个变量&#xff0c;中间还要加分号的尴尬&#xff0c;中间…

Nature:类脑计算亟需宏大蓝图

来源&#xff1a;集智俱乐部作者&#xff1a;A. Mehonic & A. J. Kenyon翻译&#xff1a;任卡娜 审校&#xff1a;JawDrin 编辑&#xff1a;邓一雪 导语与日俱增的算力需求下&#xff0c;现代计算系统能耗也越来越高&#xff0c;很难作为可持续的平台支持人工智能技术的未来…

Sublime Text 3无法安装Package Control插件的解决

QUESTION:Sublime Text 3无法安装Package Control插件的解决? ANSWER: 为了更准确的定位问题&#xff0c;建议插件在安装前开启控制台&#xff08;快捷键Ctrl~&#xff09;,同时在开启debug模式&#xff0c;这样可以在安装过程中了解哪一步出了问题&#xff0c;然后有针对性…

JAVA:线程总结及多线程实现的两种方法

JAVA&#xff1a;线程总结 目录 目录 JAVA&#xff1a;线程总结 JAVA&#xff1a;线程总结 01_多线程(多线程的引入)(了解) 02_多线程(多线程并行和并发的区别)(了解) 03_多线程(Java程序运行原理和JVM的启动是多线程的吗)(了解) 04_多线程(多线程程序实现的方式1)(掌握…

WEB3.0 能否代表科技未来趋势的主流

来源&#xff1a;刘锋科学网博客作者 &#xff1a;刘锋链接地址&#xff1a;https://blog.sciencenet.cn/blog-39263-1339334.html本文是根据微信交流的内容整理形成&#xff0c;算是一个随笔&#xff0c;反映了个人的一些观点&#xff0c;未必正确&#xff0c;仅供参考。根据目…

网线制作,集线器、交换机、路由器的介绍以及路由器的设置

目录 一. 网线制作 1.1 制作材料 1.2 网线标准 1.3 网线做法 二. 集线器、交换机、路由器介绍 前言 简介 简单来说 三. 路由器的设置 设置1 设置2 设置3 设置4 无线设置 一. 网线制作 1.1 制作材料 网线 …