持续总结中!2024年面试必问 100 道 Java基础面试题(三十七)

上一篇地址:持续总结中!2024年面试必问 100 道 Java基础面试题(三十六)-CSDN博客

七十三、什么是hash冲突?

在计算机科学中,特别是在数据结构和算法领域,哈希冲突(Hash Collision)是指在使用哈希(Hash)函数将数据映射到哈希表(Hash Table)时,不同的输入数据经过哈希函数计算后得到了相同的哈希值(即索引值)。由于哈希表的大小是有限的,而可能的输入数据是无限的,因此哈希冲突在实际应用中是不可避免的。

哈希冲突的原因

  1. 有限的哈希表大小:哈希表通常由数组实现,其大小是固定的,而数据的输入可以是无限的,因此不同的数据项可能映射到同一个哈希表位置。

  2. 不均匀的哈希值分布:理想情况下,哈希函数应该将输入数据均匀地分布在哈希表的所有位置。然而,由于输入数据的特定特征或哈希函数的局限性,有时哈希值可能不会均匀分布,导致某些位置冲突较多。

哈希冲突的解决策略

  1. 链地址法(Chaining):在链地址法中,哈希表的每个位置(或称为“桶”)都关联一个链表。当发生冲突时,新的数据项被添加到对应位置的链表中。

  2. 开放寻址法(Open Addressing):开放寻址法中,当发生冲突时,会根据某种探测策略在哈希表中寻找下一个空闲位置。常见的探测方法包括线性探测、二次探测和双重散列。

  3. 双重哈希(Double Hashing):使用两个哈希函数来计算哈希值,当第一个哈希函数发生冲突时,使用第二个哈希函数计算下一个可能的位置。

  4. 哈希表扩容:当哈希表的负载因子(已使用的桶数量与总桶数量的比值)超过某个阈值时,可以通过增加哈希表的大小来减少冲突。

示例代码

以下是使用链地址法解决哈希冲突的简单示例:

import java.util.LinkedList;
import java.util.List;class HashTable {private List<List<String>> table;public HashTable(int size) {table = new LinkedList<>();for (int i = 0; i < size; i++) {table.add(new LinkedList<>());}}public void insert(String key, String value) {int index = hashFunction(key);table.get(index).add(value);}private int hashFunction(String key) {return key.hashCode() % table.size();}// 其他方法...
}public class HashCollisionExample {public static void main(String[] args) {HashTable hashTable = new HashTable(10); // 创建一个大小为10的哈希表hashTable.insert("apple", "fruit");hashTable.insert("banana", "fruit");// "apple" 和 "banana" 可能发生冲突,被存储在同一个链表中}
}

在这个示例中,我们创建了一个简单的哈希表,它使用链地址法来解决哈希冲突。当插入两个键时,如果它们的哈希值相同,它们将被存储在同一个链表中。

注意事项

  • 哈希冲突是不可避免的,但可以通过合理的哈希函数设计和冲突解决策略来最小化。
  • 哈希表的性能在很大程度上取决于哈希函数的质量和冲突解决策略的有效性。
  • 在设计哈希表时,需要考虑负载因子和哈希表的扩容策略,以保持良好的性能。

总结来说,哈希冲突是哈希表操作中的一个常见问题,它发生在不同数据项映射到同一个哈希表位置时。通过使用不同的冲突解决策略,可以有效地管理冲突,从而维护哈希表的高效性能。

七十四、equals和hashCode的区别和联系?

在Java中,equals() 方法和 hashCode() 方法是对象比较和哈希表使用中非常重要的两个方法。它们之间既有区别也有联系:

equals() 方法

  1. 目的equals() 方法用于比较两个对象是否相等。它的默认实现在 java.lang.Object 中比较的是对象的内存地址,但通常需要根据对象的属性进行重写。

  2. 重写:当类的对象用于集合(如 HashSetHashMap)或进行对象比较时,应该重写 equals() 方法,以确保比较逻辑符合预期。

  3. 一致性equals() 方法的实现必须满足以下条件:

    • 自反性:对于任何非空引用 xx.equals(x) 应返回 true
    • 对称性:对于任何非空引用 x 和 yx.equals(y) 应等于 y.equals(x)
    • 传递性:对于任何非空引用 xy 和 z,如果 x.equals(y) 返回 true,且 y.equals(z) 返回 true,则 x.equals(z) 也应返回 true
    • 一致性:对于任何非空引用 x 和 y,如果对象的内容没有被修改,多次调用 x.equals(y) 应一致地返回 true 或 false
    • 对于任何非空引用 xx.equals(null) 应返回 false

hashCode() 方法

  1. 目的hashCode() 方法返回一个 int 类型的哈希码值,用于哈希表的索引。它根据对象的内部状态生成一个数值,这个数值在对象的生命周期内应保持一致。

  2. 重写:当重写了 equals() 方法时,通常也应该重写 hashCode() 方法,以维护 equals()hashCode() 之间的一致性。

  3. 散列冲突:不同的对象可能产生相同的哈希码,这种现象称为散列冲突。一个好的哈希函数会尽量减少这种冲突。

联系

  • 相等性与哈希码:根据Java的约定,如果两个对象通过 equals() 方法比较是相等的,那么它们的 hashCode() 方法也应该返回相同的值。这样可以确保使用 hashCode() 方法的集合(如 HashMapHashSet)能够正常工作。

  • 性能hashCode() 方法常用于哈希表中快速定位对象。如果对象的 equals() 方法相等,但 hashCode() 方法不相等,那么在哈希表中搜索对象时可能会影响性能。

示例代码

import java.util.Objects;public class MyObject {private int id;private String name;public MyObject(int id, String name) {this.id = id;this.name = name;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;MyObject myObject = (MyObject) o;return id == myObject.id &&Objects.equals(name, myObject.name);}@Overridepublic int hashCode() {return Objects.hash(id, name);}
}

在这个示例中,MyObject 类重写了 equals() 方法和 hashCode() 方法。equals() 方法比较对象的 idname 属性,而 hashCode() 方法根据这些属性生成哈希码。

注意事项

  • 仅仅重写 equals() 方法而忽略 hashCode() 方法是不正确的,这可能导致哈希表操作出现问题。
  • 哈希码的计算应该基于对象的关键属性,这些属性是用于 equals() 方法比较的属性。
  • 在并发环境中,如果对象的属性可能会变化,那么 hashCode() 的值也应该相应地变化,以避免哈希表中的键失效。

总结来说,equals() 方法用于比较对象的相等性,而 hashCode() 方法用于生成哈希码,它们之间有紧密的联系。正确实现这两个方法对于确保对象在集合中的正常使用至关重要。

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

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

相关文章

HI3516CV610

一、总体介绍 HI3516CV610是一颗应用在安防市场的IPC SoC&#xff0c;在开放操作系统、新一代视频编解码标准网络安全和隐私保护、人工智能方面引领行业发展&#xff0c;主要面向室内外场景下的枪机、球机、半球机、海螺机、枪球一体机、双目长短焦机等产品形态&#xff0c;打…

访问网络附加存储:nfs

文章目录 访问网络附加存储一、网络附加存储1.1、存储类型1.3、通过NFS挂载NAS1.4、NFS挂载过程服务端客户端 二、实验&#xff1a;搭建NFS服务端及挂载到nfs客户端服务端客户端测试命令合集服务端客户端 访问网络附加存储 一、网络附加存储 1.1、存储类型 DAS&#xff1a;Di…

学习Uni-app开发小程序Day6

今天是学习的第六天&#xff0c;把以前的重新回顾一次&#xff0c;加深记忆 v-for列表循环和复选框展示 这是vue的学习知识&#xff0c;在组件中使用后v-for&#xff0c;方式有几种&#xff0c; v-for“item in 数据源” v-for“&#xff08;item &#xff0c; index&#xff0…

零代码编程:用Kimichat从PDF文件中批量提取图片

一个PDF文件中&#xff0c;有很多图片&#xff0c;想批量提取出来&#xff0c;可以借助kimi智能助手。 在借助kimi智能助手中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个网页爬取Python脚本的任务&#xff0c;具体步骤如下&#xff1a; 打开文件夹…

2024年融资融券利率最新变化,又降低了?

最近有很多朋友在问我问融资融券的业务&#xff0c;都是比较关心这个利率的问题。确实&#xff0c;做融资融券最重要的利率&#xff0c;利率低会节省很大一笔资金&#xff0c;今天在这边给大家对接一个上市券商&#xff0c;可以给到大家万一的交易佣金和5%的融资利率&#xff0…

行业早报5.9

1.LG Display 一季度营收 5.253 万亿韩元&#xff0c;同比增长 19%&#xff1b; 2.郭明錤预测英伟达 2025 年第 4 季度量产新一代 R 系列 AI 芯片&#xff1b; 3.小鹏汽车 4 月交付量 9393 辆&#xff1a;同比增长 33%&#xff1b; 4.中国儒意 2.59 亿元收购有爱互娱&#xff0…

乡村振兴规划设计一站式资料大全,能为乡村振兴从业者带来什么帮助?

乡村振兴规划设计一站式资料大全对于乡村振兴从业者来说&#xff0c;具有非常重要的帮助作用。这种资料大全通常包含了从政策解读、市场分析、规划设计、到实施策略等各个方面的详尽信息&#xff0c;能够极大地提升从业者的工作效率和专业能力。 具体来说&#xff0c;乡村振兴规…

Python selenium

1.搭建环境 1.安装&#xff1a; pip install msedge-selenium-tools 不要使用pip install selenium&#xff0c;我的电脑上没法运行 2.下载驱动 Microsoft Edge WebDriver |Microsoft Edge 开发人员 edge浏览器点设置---关于即可找到版本号&#xff0c;一定要下载对应版…

【TypeScript类型兼容性简介以及使用方法】

TypeScript 的类型兼容性是指当一个类型被赋值给另一个类型时&#xff0c;是否满足赋值操作的条件。TypeScript 通过其结构化类型系统来进行类型兼容性的判断&#xff0c;即只要两个类型的结构相似&#xff0c;它们就是兼容的。 在判断两个类型是否兼容时&#xff0c;TypeScri…

实践精益理念:精益生产培训助力企业持续增长

在日益激烈的市场竞争中&#xff0c;企业如何寻找持续增长的动力&#xff0c;提升整体创新能力和核心竞争力&#xff1f;张驰咨询通过多年来的深入研究和实践&#xff0c;结合众多企业的实际情况&#xff0c;带来了精益生产培训的全新视角。 在近期举办的一次精益生产培训中&am…

五种算法(BWO、RUN、SO、HO、GWO)求解复杂城市地形下无人机路径规划,可以修改障碍物及起始点(MATLAB)

一、算法介绍 &#xff08;1&#xff09;白鲸优化算法BWO 参考文献&#xff1a;Zhong C, Li G, Meng Z. Beluga whale optimization: A novel nature-inspired metaheuristic algorithm[J]. Knowledge-Based Systems, 2022, 109215. &#xff08;2&#xff09;龙格-库塔优化…

服务器数据恢复—RAID5磁盘阵列两块盘离线的数据恢复过程

服务器故障&#xff1a; 服务器中有一组由多块硬盘组建的raid5磁盘阵列&#xff0c;服务器阵列中2块硬盘先后掉线导致服务器崩溃。 服务器数据恢复过程&#xff1a; 1、将故障服务器中所有磁盘编号后取出&#xff0c;由硬件工程师对掉线的两块磁盘进行物理故障检测&#xff0c…

Hoot100-T6三数之和

给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 示例 1…

二层交换机与路由器连通上网实验

华为二层交换机与路由器连通上网实验 二层交换机是一种网络设备&#xff0c;用于在局域网&#xff08;LAN&#xff09;中转发数据帧。它工作在OSI模型的第二层&#xff0c;即数据链路层。二层交换机通过学习和维护MAC地址表&#xff0c;实现了数据的快速转发和广播域的隔离。 实…

java数据结构之数组系统了解

1.数组介绍 数组就是一个存储数据的容器&#xff0c;容器的长度固定、存储元素的数据类型固定。 跟变量加以区分&#xff1a;变量也可以存储数据&#xff0c;但是只能存一个值。当要存的数据比较多的时候&#xff0c;用变量就不方便了。我们就可以使用数组来存储。 1.1数组…

并发编程实现

一、并行编程 1、Parallel 类 Parallel类是System.Threading.Tasks命名空间中的一个重要类&#xff0c;它提供数据并行和任务并行的高级抽象。 For和ForEach Parallel类下的For和ForEach对应着普通的循环和遍历(普通的for和foreach)&#xff0c;但执行时会尝试在多个线程上…

搜维尔科技:工作场所人体工程学分析-最大限度地提高员工生产力

工作场所人体工程学分析-最大限度地提高员工生产力 - 增强工作场所安全和生产力&#xff1a;了解人体工程学评估在改善工作场所安全和提高企业生产力方面的关键作用 搜维尔科技&#xff1a;工作场所人体工程学分析-最大限度地提高员工生产力

maya可视化blendshape

目录 maya读取csv&#xff0c;驱动头模表情变化 python操作示例 读取csv设置表情动画 maya 中文版怎么可视化blendshape 1. 创建Blend Shapes 2. 使用混合形状编辑器 3. 微调Blend Shapes 4. 高级可视化和调试 maya 英文版可视化blendshape 1. 创建Blend Shapes 2. …

安防视频/视频汇聚系统EasyCVR视频融合云平台助力智能化酒店安防体系的搭建

一、背景需求 2024年“五一”假期&#xff0c;全国文化和旅游市场总体平稳有序。文化和旅游部6日发布数据显示&#xff0c;据文化和旅游部数据中心测算&#xff0c;全国国内旅游出游合计2.95亿人次。“五一”假期县域市场酒店预订订单同比增长68%&#xff0c;而酒店作为一个高…

SpringCloudAlibaba:4.3云原生网关higress的JWT 认证

概述 简介 JWT是一种用于双方之间传递安全信息的简洁的、URL安全的声明规范。 定义了一种简洁的&#xff0c;自包含的方法用于通信双方之间以Json对象的形式安全的传递信息&#xff0c;特别适用于分布式站点的单点登录&#xff08;SSO&#xff09;场景 session认证的缺点 1.安…