中级java每日一道面试题-2024年7月16日

面试官: 你对java中的hashCode了解多少?

我回答

1. hashCode的基础

定义: hashCode方法定义在java.lang.Object类中,它是所有Java类的超类。这个方法返回一个int类型的值,代表了对象的哈希码。这个值由对象的状态决定,并且理论上应该在对象生命周期内保持一致。
作用: hashCode() 方法主要用于基于哈希的集合中,如 HashMap、HashSet 等,以确定对象在哈希表中的索引位置,从而加速查找过程。

2. hashCodeequals

当两个对象根据equals方法被认为相等时,它们的hashCode值也必须相等。这是Objectequals方法和hashCode方法之间的合同规定。但是,相反的情况并不总是成立——即hashCode值相同的两个对象不一定是相等的。

3. 散列表的性能

hashCode方法在散列表中起着关键作用。散列表使用hashCode值来确定对象的存储位置,这使得查找、插入和删除操作可以在平均意义上达到O(1)的时间复杂度。如果hashCode方法设计不当,可能会导致过多的哈希冲突,从而降低散列表的性能。

4. 重写hashCodeequals

当你重写一个类的equals方法时,通常也需要重写hashCode方法。这是因为散列表在比较对象前首先会比较hashCode值。如果hashCode值不同,那么散列表知道这两个对象不可能相等,从而避免了不必要的equals方法调用,节省了时间。如果hashCode值相同,散列表会继续调用equals方法进行最终的比较。

5. 哈希冲突

哈希冲突是指两个不同的对象产生了相同的hashCode值。良好的hashCode方法设计应该尽量减少这种冲突,但这几乎是不可能完全避免的,因为hashCode值的空间有限(只有int类型大小),而可能的对象状态空间则可能大得多。

6. 稳定性与一致性

hashCode值对于给定对象必须在整个程序执行期间保持稳定,即使对象的状态发生了变化。然而,这并不意味着在不同JVM实例或不同运行之间hashCode值必须保持一致。

7. 性能优化

在重写hashCode时,应该考虑到性能。一个好的hashCode实现应该是简单的、快速的,并且能够均匀分布对象的哈希值。

8. 多线程环境下的hashCode

在多线程环境中,hashCode的实现需要注意线程安全性。如果hashCode依赖于可变状态,那么在多线程环境下可能会产生不稳定的结果。

9. hashCode() 的实现原则

**一致性:**只要对象的信息没有被修改(即 equals 比较中所用的信息),那么对该对象多次调用 hashCode() 方法应该始终如一地返回同一个整数。
**合理分布:**理想的哈希函数应该尽可能减少哈希碰撞,即不同的对象应该产生不同的哈希码值。
**效率:**哈希码的计算应该相对高效,以避免影响程序的性能。

实例

假设你有一个Book类,其中包含titleauthor字段。为了正确地重写hashCodeequals方法,你可以这样做:

public class Book {private String title;private String author;// 构造函数和其他方法...@Overridepublic boolean equals(Object obj) {if (this == obj) return true;if (obj == null || getClass() != obj.getClass()) return false;Book book = (Book) obj;return Objects.equals(title, book.title) &&Objects.equals(author, book.author);}@Overridepublic int hashCode() {return Objects.hash(title, author);}
}

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

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

相关文章

PHP 中使用jupitern/docx将多个work文档合并为一个word文档

jupitern/docx PHP Docx tolls. docx模板系统 将docx文件合并到一个文件中 可选择在合并文件之间添加分页符 版本要求 PHP 5.4 or higher. 安装插件 composer require jupitern/docx Include jupitern/docx in your project, by adding it to your composer.json file. …

代码随想录算法训练营第六十三天| 最短路径总结篇、图论总结篇

[KamaCoder] 最短路问题总结篇 [KamaCoder] 最短路问题总结篇 自己看到题目的第一想法 最短路径问题刚开始看的时候, 可能是 N 阳了, 高烧不停的在 38.2 到 39.2 之间波动, 烧的很厉害的时候会疯狂的出汗, 然后体温就下降了. 到现在三周了, 还是咳嗽喉咙有点疼, 但是已经恢复的…

领航Linux UDP:构建高效网络新纪元

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 引言Udp和Tcp的异同相同点不同点总结 1.1、socket1.2、bind1.3、recvfrom1.4、sendto2.1、代码2.1、说明3.1、代码3.2、说明 引言 在前几篇博客中,我们学习了Linux网络编程中的一些概念。…

pandas+pywin32操作excel办公自动化

import pandas as pd import re import win32com.client as win32 from win32com.client import constants import os import os.path as osp #读取表格 pathos.getcwd() fposp.join(path,fuck_demo.xlsx) dfpd.read_excel(fp,header1,usecols[序号,光缆段落名(A端…

【数据结构(邓俊辉)学习笔记】高级搜索树02——B树

文章目录 1. 大数据1.1 640 KB1.2 越来越大的数据1.3 越来越小的内存1.4 一秒与一天1.5 分级I/O1.6 1B 1KB 2. 结构2.1 观察体验2.2 多路平衡2.3 还是I/O2.4 深度统一2.5 阶次含义2.6 紧凑表示2.7 BTNode2.8 BTree 3. 查找3.1 算法过程3.2 操作实例3.3 算法实现3.4 主次成本3.…

JAVASE——图书管理系统

JAVASE图书管理系统 主要业务有:管理员(增删改查),会员(借书还书查看记录) 管理员主要有:查看图书,增加图书,修改图书,会员管理,删除图书, 会员主要有&#x…

昇思25天学习打卡营第22天|GAN图像生成

今天是参加昇思25天学习打卡营的第22天,今天打卡的课程是“GAN图像生成”,这里做一个简单的分享。 1.简介 今天来学习“GAN图像生成”,这是一个基础的生成式模型。 生成式对抗网络(Generative Adversarial Networks,GAN)是一种…

Bug:时间字段显示有问题

Bug:时间字段显示有问题 文章目录 Bug:时间字段显示有问题1、问题2、解决方法一:添加注解3、解决方法二:消息转换器自定义对象映射器配置消息转换器 1、问题 ​ 在后端传输时间给前端的时候,发现前端的时间显示有问题…

代码trick 类型判断

文章目录 判断 null 和 undefined 判断 null 和 undefined vue 源码里的技巧,即 value null 用的是双等号。在双等号中,null 和 undefined 是相等的,也就是说 value 是 null 或 undefined 都会为 true if( value null ){// ... }

[Spring] Spring Web MVC案例实战

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

AV1技术学习:Translational Motion Compensation

编码块根据运动矢量在参考帧中找到相应的预测块,如下图所示,当前块的左上角的位置为(x0, y0),在参考帧中找到同样位置(x0, y0)的块,根据运动矢量移动到目标参考块(左上角位置为:(x1, y1))。 AV1…

前端a-tree遇到的问题

在使用a-tree时候,给虚拟滚动的高度,然后展开a-tree滑动一段距离 比如这样 随后你切换页面,在返回这个页面的时候 就会出现这样的bug 解决方法: onBeforeRouteLeave((to, from, next) > {// 可以在路由参数变化时执行的逻辑ke…

白山云荣获信通院“算网安全行业应用优秀案例”奖

日前,在由中国通信标准化协会算网融合产业及标准推进委员会与信通院共同组织召开的“2024年算网融合产业发展大会”上,白山云凭借创新的SD-WAN算网融合方案,荣获“算网安全行业应用优秀案例”奖。 算网融合是多元异构、海量泛在的算力设施&am…

path模块和HTTP协议

一。path模块常用API ./相对路径,/绝对路径 二,HTTP协议 1.请求报文 1.请求行 URL的组成 2.请求头 3.请求体 可以是空:GET请求 可以是字符串,还可以是json:POST请求 2.响应报文 1.响应行 HTTP / 1.1 200 OK H…

VsCode 与远程服务器 ssh免密登录

首先配置信息 加入下列信息 Host qb-zn HostName 8.1xxx.2xx.3xx User root ForwardAgent yes Port 22 IdentityFile ~/.ssh/id_rsa 找到自己的公钥,不带pub是私钥,打死都不能给别人。复制公钥 拿到公钥后,来到远程服务器 vim ~/.ss…

Leetcode—3011. 判断一个数组是否可以变为有序【中等】(__builtin_popcount()、ranges::is_sorted())

2024每日刷题&#xff08;144&#xff09; Leetcode—3011. 判断一个数组是否可以变为有序 O(n)复杂度实现代码 class Solution { public:bool canSortArray(vector<int>& nums) {// 二进制数位下1数目相同的元素就不进行组内排序// 只进行分组// 当前组的值若小于…

人工智能算法工程师(中级)课程12-PyTorch神经网络之LSTM和GRU网络与代码详解1

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程12-PyTorch神经网络之LSTM和GRU网络与代码详解。在深度学习领域,循环神经网络(RNN)因其处理序列数据的能力而备受关注。然而,传统的RNN存在梯度消失和梯度爆炸的问题,这使得它在长序列任务中的表现不尽…

MySQL--C_C++语言连接访问

Connector/C的使用 首先需要在mysql官网下载C接口库 解压指令 tar -zxvf 压缩包名 下载并解压好后 但是还有比这更优的做法。 这样子手动安装不仅麻烦&#xff0c;还可能存在兼容性的问题。 其实在我们使用yum安装mysql时&#xff0c;大概率会自动帮我们把其他的环境都安装…

[JS]认识feach

介绍 feach是浏览器内置的api, 用于发送网络请求 请求方式对比 AJAX: 基于XMLHttpRequest接收请求, 使用繁琐Axios: 基于Promise的请求客户端, 在浏览器和node中均可使用, 使用简单fetch: 浏览器内置的api, 基于Promise, 功能简单 基础语法 <body><button>发请求…

OracleLinux6.9升级UEK内核

方法一: [root@localhost ~]# uname -r 4.1.12-61.1.28.el6uek.x86_64 [root@localhost ~]# rpm -qa | grep kernel-uek kernel-uek-firmware-4.1.12-61.1.28.el6uek.noarch kernel-uek-4.1.12-61.1.28.el6uek.x86_64 [root@localhost ~]# yum list kernel-uek Loaded plug…