java面试强基(7)

news2024/10/6 20:35:41

 

hashCode() 有什么用?

​ hashCode() 的作用是获取哈希码(int 整数),也称为散列码。这个哈希码的作用是确定该对象在哈希表中的索引位置。

​ hashCode()定义在 JDK 的 Object 类中,这就意味着 Java 中的任何类都包含有 hashCode() 函数。

​ 散列表存储的是键值对(key-value),它的特点是:能根据“键”快速的检索出对应的“值”。这其中就利用到了散列码!(可以快速找到所需要的对象)

为什么要有 hashCode?

​ 其实, hashCode() 和 equals()都是用于比较两个对象是否相等。

​ 那为什么 JDK 还要同时提供这两个方法呢?

​ 这是因为在一些容器(比如 HashMapHashSet)中,有了 hashCode() 之后,判断元素是否在对应容器中的效率会更高(参考添加元素进HashSet的过程)!

 hashCode 有多个对象,它会继续使用 equals() 来判断是否真的相同。也就是说 hashCode 帮助我们大大缩小了查找成本。

​ 那为什么不只提供 hashCode() 方法呢?

​ 这是因为两个对象的hashCode 值相等并不代表两个对象就相等。

​ 那为什么两个对象有相同的 hashCode 值,它们也不一定是相等的?

​ 因为 hashCode() 所使用的哈希算法也许刚好会让多个对象传回相同的哈希值。越糟糕的哈希算法越容易碰撞,但这也与数据值域分布的特性有关(所谓哈希碰撞也就是指的是不同的对象得到相同的 hashCode )。

总结下来就是 :

  • 如果两个对象的hashCode 值相等,那这两个对象不一定相等(哈希碰撞)。
  • 如果两个对象的hashCode 值相等并且equals()方法也返回 true,我们才认为这两个对象相等。
  • 如果两个对象的hashCode 值不相等,我们就可以直接认为这两个对象不相等。

为什么重写 equals() 时必须重写 hashCode() 方法 

因为两个相等的对象的 hashCode 值必须是相等。也就是说如果 equals 方法判断两个对象是相等的,那这两个对象的 hashCode 值也要相等。

​ 如果重写 equals() 时没有重写 hashCode() 方法的话就可能会导致 equals 方法判断是相等的两个对象,hashCode 值却不相等。

总结 :

  • equals 方法判断两个对象是相等的,那这两个对象的 hashCode 值也要相等。
  • 两个对象有相同的 hashCode 值,他们也不一定是相等的(哈希碰撞)。

官方文档说的是通常有必要需要重写,但其实说必须重写也没有问题,因为你并不能百分百确定这个类之后是否会在HashSet, Hashtable, HashMap等等这些本质是散列表的数据结构中用到。但要记住的是,在没有散列表的情况下,hashCode和equals其实是没有关系的,hashcode并没有什么作用。 

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

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

相关文章

阿里架构师耗时1年,把P8所需要的整个Java体系,都整理到了一起

始末 有人调侃我们说: 程序员不如送外卖。送外卖是搬运食物,自己是搬运代码,都不产出新的东西……透支体力,又消耗健康,可替代性极强,30岁之后就要面临被优化的危险……想跳槽,但是更高的平台…

科技风杂志科技风杂志社科技风编辑部2022年第31期目录

科技创新《科技风》投稿:cnqikantg126.com 基于钢架网箱清理控制系统的研究 张浩;崔新忠;丁树兵;尹杰;卢佳乐;王隽屹;张津宁; 1-3 遥感技术在海洋区域地质调查中的应用——以岛礁区调查为例 韩艳飞; 4-6 医院电气工程智能自动化及PLC技术在医院电气设备…

mipi介绍

文章目录1.MIPI简介1-1:DSI layer2.D_PHY2-1:D_PHY介绍2-2:电平状态2-3:lane结构2-4:data lane操作模式2-4-1:escape mode和space one hot coding2-4-2:Low-Power Data Transmission&#xff08…

图书借阅管理系统的设计与实现/书籍借还管理系统

摘要 随着Internet的发展,人们的日常生活已经离不开网络。未来人们的生活与工作将变得越来越数字化、网络化和电子化。网上借阅一系列功能将成为人们最关注话题,本论文是以构建图书借阅为目标,使用 Java制作,由前台用户借阅图书、…

计算机网络4小时速成:网络安全,被动攻击,主动攻击,对称加密,公钥秘钥,数字签名,鉴别,网络层安全协议IPsec,传输层安全协议SSL,防火墙,入侵检测系统

计算机网络4小时速成:网络安全,被动攻击,主动攻击,对称加密,公钥秘钥,数字签名,鉴别,网络层安全协议IPsec,传输层安全协议SSL,防火墙,入侵检测系统…

PTA题目 计算分段函数[1]

本题目要求计算下列分段函数f(x)的值: 输入格式: 输入在一行中给出实数x。 输出格式: 在一行中按“f(x) result”的格式输出,其中x与result都保留一位小数。 输入样例1: 10输出样例1: f(10.0) 0.1输入样例2: 0输出样例2: f(0.0) 0.0 #includ…

公众号免费题库接口

公众号免费题库接口 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 查题校园题库:查题校园题库后台(点击…

IDEA Windows下SPARK连接Hive

IDEA Windows下SPARK连接Hive 文章目录IDEA Windows下SPARK连接Hive一、本地Windows环境配置二、IDEA项目配置1. POM配置2. 资源文件配置3. 测试验证一、本地Windows环境配置 本地构建HADOOP客户端 将大数据平台的HAODOP环境打包拿到本地环境来: #压缩整个HADOOP…

特征选择技术总结

在本文中,我们将回顾特性选择技术并回答为什么它很重要以及如何使用python实现它。 本文还可以帮助你解答以下的面试问题: 什么是特征选择?说出特性选择的一些好处你知道哪些特征选择技巧?区分单变量、双变量和多变量分析。我们能用PCA来进行特征选择吗?前向特征…

如何打造一支专业的QA团队,至少要关注这5点

目录 第一、专职的QA人员 第二、关注QA的能力素质 第三、适度的量化指标 第四、增加QA工作的透明度 第五、 充分利用好评审这把“利剑” QA是Quality Assurance的缩写,直接翻译过来就是“质量保证”的意思。 QA也称为质量工程师,基本上每个产品型或…

指纹浏览器——为跨境电商打造的跨境卫士

“跨境卫士”这个词当然是保障跨境人账号安全的意思,为跨境电商打造的跨境卫士,说白了就是专门为跨境电商商家解决各种痛点的软件工具,那一说到这类软件工具,很多人脑海中第一时间想到的是什么?相信都会出现“指纹浏览…

zabbix日志监控:操作系统、业务系统、文件大小、多行日志

zabbix日志监控:操作系统、业务系统、文件大小、多行日志 目录1 监控操作系统日志2 监控业务系统日志具体要求:分析:操作:3 监控日志文件大小(1)在被管主机当中安装agent(2)在以下za…

第五天(渐变)

文章目录笔记第五章 ⻚⾯布局5.1弹性盒⼦练习题目&#xff08;使用实现学校官网的首页面&#xff09;效果截图项目反思&#xff1a;笔记 其他效果 渐变<!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><s…

「JVS低代码开发平台」设备维保到期自动提醒配置介绍

配置需求 构建一个 对设备管理的界面&#xff0c;在新增设备时&#xff0c;能录入设备到期的时间&#xff0c;发起维保后&#xff0c;能修改下次设备到期的时间&#xff0c;维保的状态系统自动根据当前时间和维保到期时间&#xff0c;自动调整。 整体配置思路 1、配置设备管理…

leecode#x平方根#爬楼梯

题目描述&#xff1a; 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。 注意&#xff1a;不允许使用任何内置指数函数和算符&#xff0c;例如 pow(x, 0.5) 或者 x ** 0…

stm32cubemx hal学习记录:FreeRTOS信号量

一、基本配置 1、配置RCC、USART1、时钟84MHz 2、配置SYS&#xff0c;将Timebase Source修改为除滴答定时器外的其他定时器。 3、初始化LED的两个引脚、两个按键引脚 4、开启FreeRTOS&#xff0c;v1与v2版本不同&#xff0c;一般选用v1即可 5、创建二值信号量Binary Semap…

IPv6通信实验

♥️作者&#xff1a;小刘在C站 ♥️每天分享云计算网络运维课堂笔记&#xff0c;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放。 目录 实验命令指南 1&#xff09;配置ip地址 在r2上&#xff1a; 在r3上&#xff1a;…

TDengine

目录1、在linux上安装服务端2、在本地安装客户端3、通过Idea连接服务端4、控制台基本使用5、流式计算1、在linux上安装服务端 1、首先下载服务端&#xff0c;我下载的是&#xff1a; TDengine-server-2.6.0.30-Linux-x64.tar.gz 下载地址 2、下载过后传到虚拟机。并解压 3、运…

当有一天TCP/IP没有了TCP

前几天我在给NetDAM可靠传输想更好的算法&#xff0c;发现我自己也傻x了&#xff0c;最根本的原因是要抛弃滑动窗口呀&#xff0c;解耦保序才是关键. 本来想明年愚人节写如果有一天TCP/IP没了IP&#xff0c;那么只能TCP over RDMA了...但是也不排除为了兼容以太网只能TCP over…

C语言中,可变参数函数调用的过程?!

以下是一位同学&#xff0c;发送给我的问题。 如下图&#xff0c;是学生在学习完指针章节后&#xff0c;写的测试代码。 他的疑问是&#xff1a;pa为什么指向a[3]的地址啊&#xff1f; 查看程序的输出后&#xff0c;知道他想问的是&#xff1a;为什么第二个printf语句输出的分…