面试 Java 基础八股文十问十答第三十期

面试 Java 基础八股文十问十答第三十期

作者:程序员小白条,个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1)HashMap 和 HashTable 的区别

  • 线程安全性: HashMap 是非线程安全的,而 HashTable 是线程安全的,所有方法都被 synchronized 关键字修饰。
  • null 键值: HashMap 允许键和值都为 null,而 HashTable 不允许键或值为 null,否则会抛出 NullPointerException。
  • 性能: 由于 HashTable 的方法都是同步的,所以在单线程环境下性能通常比 HashMap 差。

2)HashSet 和 HashMap 的区别

  • 存储方式: HashSet 是基于 HashMap 实现的,它只存储键而没有值,实际上是通过 HashMap 的键来存储元素的。
  • 元素唯一性: HashSet 用于存储不重复的元素,即不允许重复元素存在;而 HashMap 存储键值对,键不能重复,但值可以重复。

3)HashMap 的实现原理

HashMap 是基于哈希表实现的,它的实现原理主要包括以下几点:

  • 哈希函数: HashMap 使用哈希函数将键映射到哈希表的索引位置。这个哈希函数通常会将键的哈希码进行处理,以保证分布均匀,减少哈希冲突的概率。
  • 数组 + 链表 / 红黑树: HashMap 内部维护了一个数组,每个数组元素称为桶(bucket)。当发生哈希冲突时,即多个键映射到同一个桶上时,HashMap 使用链表或者红黑树来存储具有相同哈希码的键值对。在 JDK 8 中,当链表长度超过一定阈值时,链表会转换为红黑树,以提高查找效率。
  • 扩容与重新哈希: 当 HashMap 中的元素个数超过数组容量乘以负载因子时,就会触发扩容操作。扩容操作会创建一个新的更大的数组,并将所有键值对重新哈希到新的数组中,以保持性能稳定。
  • 迭代顺序: HashMap 中的元素没有固定的顺序,迭代顺序由哈希桶的顺序和哈希碰撞解决方法决定,因此不能保证元素的顺序性。

4)HashMap 的扩容机制

HashMap 的扩容机制是在达到一定负载因子(Load Factor)时进行的,负载因子是指哈希表中的元素数量与桶的数量的比值。当负载因子超过阈值时,HashMap 会自动进行扩容操作。扩容过程包括以下几个步骤:

  1. 创建一个新的两倍大小的数组。
  2. 将原数组中的所有键值对重新计算哈希值,并根据新的数组大小重新分配到新的桶中。
  3. 将原数组中的每个桶中的键值对转移到新数组中的对应位置。
  4. 最后,将原数组引用指向新数组,完成扩容操作。

5)HashMap 扩容是 2 的 n 次方倍的原因

HashMap 扩容为 2 的 n 次方倍的大小有助于提高哈希表的性能和均匀性。当扩容因子为 2 的 n 次方倍时,通过与运算(&)可以实现快速定位元素的新位置,而不需要重新计算哈希值。这样可以提高扩容时的效率,减少元素重新分布的成本。同时,使用 2 的 n 次方倍的大小也可以保证桶的数量总是增加或减少一倍,使得哈希表的分布更加均匀。

6)HashMap 默认扩容负载因子为 0.75 的原因

HashMap 的默认扩容负载因子为 0.75 是一种折中考虑。较低的负载因子会导致哈希表频繁扩容,增加空间浪费和性能损耗;而较高的负载因子会导致哈希碰撞的概率增加,影响查找、插入和删除操作的性能。经过实验和分析,0.75 的负载因子被认为是一个比较合理的值,可以在空间利用率和性能之间取得较好的平衡。

7)设计一个 HashMap 的考虑因素

  • 哈希函数设计: 设计一个好的哈希函数是 HashMap 的核心,它需要将键尽可能均匀地映射到哈希表的不同位置,以减少哈希冲突的概率。
  • 解决哈希冲突: 考虑使用开放寻址法或链地址法等方式来解决哈希冲突,可以选择适合场景的冲突解决方法。
  • 负载因子与扩容策略: 设计合适的负载因子和扩容策略,以平衡空间利用率和性能,并避免频繁的扩容操作。
  • 线程安全性: 根据使用场景考虑是否需要支持线程安全的 HashMap,可以选择使用同步机制或者使用 ConcurrentHashMap 等线程安全的替代实现。
  • 性能优化: 考虑如何优化 HashMap 的性能,包括优化哈希函数、优化扩容策略、优化冲突解决方法等。

8)JDK 1.8 对 HashMap 做红黑树改动的原因

JDK 1.8 对 HashMap 做红黑树改动的原因是为了解决在哈希碰撞严重时,链表过长导致的性能问题。通过将链表转换为红黑树,可以提高查找、插入和删除操作的性能,尤其是在元素数量较大、哈希冲突严重的情况下。

9)JDK 1.8 对 HashMap 的其他改动

除了引入红黑树以优化性能外,JDK 1.8 对 HashMap 还做了一些其他改动,包括:

  • 优化了哈希函数: JDK 1.8 对哈希函数进行了优化,提高了哈希值的均匀性,减少了哈希碰撞的概率。
  • 优化了扩容策略: JDK 1.8 对扩容策略进行了优化,使得扩容操作更加高效,减少了重新哈希的次数。
  • 优化了迭代顺序: JDK 1.8 对 HashMap 的迭代顺序进行了优化,使得迭代时元素的顺序更加可预测和稳定。

10)LinkedHashMap 的了解

LinkedHashMap 是 Java 中的一个具有可预测迭代顺序的 Map 实现。它除了具备 HashMap 的功能外,还维护了一个双向链表来记录插入顺序或访问顺序,因此可以保证迭代顺序与插入顺序或访问顺序一致。LinkedHashMap 在需要有序遍历 Map 中的元素时非常有用,例如 LRU(Least Recently Used)缓存的实现。

开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

前后端总计已经 1300+ Star,2 W+ 访问!

⭐点赞⭐收藏⭐不迷路!⭐

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024------MySQL数据库基础知识点总结

-- 最好的选择不是最明智的,而是最勇敢的,最能体现我们真实意愿的选择。 MySQL数据库基础知识点总结 一、概念 数据库:DataBase,简称DB。按照一定格式存储数据的一些文件的组合顾名思义: 存储数据的仓库,实际上就是一…

工业光源环形系列一高均匀条形光源特点

产品特点 ◆可以根据检测需求随意调整照射角度: ◆可以根据检测需求选择光源颜色: ◆多个条形光源可以自由组合: ◆使用贴片灯珠,均匀性更好。

ICDE2024 |VDTuner:向量数据库自动调优技术

在CodeFuse接入实际业务的过程中,大模型的推理成本以及生成内容的准确性是产品规模落地的两个核心考量因素。为了降低推理成本,我们研发了CodeFuse-ModelCache语义缓存加速功能,通过引入Cache机制,缓存已经计算的结果,…

Spring Security基础教程:从入门到实战

作者介绍:✌️大厂全栈码农|毕设实战开发,专注于大学生项目实战开发、讲解和毕业答疑辅导。 推荐订阅精彩专栏 👇🏻 避免错过下次更新 Springboot项目精选实战案例 更多项目:CSDN主页YAML墨韵 学如逆水行舟&#xff0c…

Windows系统安装MySQL数据库详细教程

【确认本地是否安装mysql】 (1)按【winr】快捷键打开运行; (2)输入services.msc,点击【确定】; (3)在打开的服务列表中查找mysql服务,如果没有mysql服务&am…

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第16课-跳转私信

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第16课-跳转私信 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎&am…

猫咪没精神不吃饭?这招主食冻干喂养教你让猫咪恢复食欲

猫突然不吃东西没精神是生病了吗?当猫咪不吃东西、精神不振时,可能的原因有健康问题、环境因素或食物原因。首先应进行身体检查,观察是否有其他并发症,如无则可排除健康问题。还要给猫咪提供一个舒适的环境,多给它们一…

Elsevier旗下双1区TOP刊,8.8分影响因子加上超低自引率,各指标领跑计算机类SCI

【SciencePub学术】 今天小编给大家带来了一本计算机类的高分优刊解读,隶属于Elsevier出版社,JCR1区,中科院1区TOP,影响因子高达8.7,领域相符的学者可考虑! APPLIED SOFT COMPUTING 1 期刊概况 【期刊简…

从零开始搭建Springboot项目脚手架2:配置文件、返回值、日志等

1、多个环境与配置文件 2、统一返回值 返回值包括两种场景:正常controller的返回、异常发生之后返回 正常controller的返回:通过在controller的默认返回Response实现 异常发生之后返回:通过全局异常处理统一捕获返回 首先创建类StatusCode…

windows安装ElasticSearch以及踩坑

1.下载 elasticsearch地址:Past Releases of Elastic Stack Software | Elastichttps://www.elastic.co/cn/downloads/past-releases#elasticsearch IK分析器地址:infinilabs/analysis-ik: 🚌 The IK Analysis plugin integrates Lucene IK…

C++:多态-重写和重载

重写(Override)和重载(Overload)是面向对象编程中常用的两个概念,它们虽然都涉及到方法的定义,但是在实现和使用上有着不同的特点。 重写(Override): 重写是指在子类中重…

如何把视频转成文字稿?6个软件教你快速转换视频成文字

如何把视频转成文字稿?6个软件教你快速转换视频成文字 将视频转换为文字稿是一种有效的方式,可以帮助您提取视频中的信息并进行整理、编辑。以下是六个软件和工具,可以帮助您快速转换视频为文字稿: Google文档语音输入&#xf…

05-06 周一 Shell工程目录划分和开发最佳实践

05-06 周一 Shell工程目录划分和开发最佳实践 时间版本修改人描述2024年5月6日10:34:13V0.1宋全恒新建文档2024年5月6日11:07:12V1.0宋全恒完成 简介 之前楼主曾经完成过一个shell工程的开发,记得当时项目名称叫做campus-shell,主要是用来一键完成多个模…

高刚性滚柱直线导轨有哪些应用场景?

滚柱型滚动体取代了滚珠,由滚柱与导轨和滑块的线接触方式,滚柱导轨能在高负载的情况下仍然保持刚性值和高精度。为实现超高刚性和超重负荷能力而设计,整体滚柱导轨达到四方向等高刚性、高负载、高精度能力的特点,非常适合高速自动…

麦肯锡精英高效阅读法笔记

系列文章目录 如何有效阅读一本书笔记 读懂一本书笔记 麦肯锡精英高效阅读法笔记 文章目录 系列文章目录序章 无法读书的5个理由无法读书的理由① 忙于工作,没时间读书无法读书的理由② 不知应该读什么无法读书的理由③ 没读完的书不断增多无法读书的理由④ 工作繁…

[华为OD]C卷 精准核算检测 100

题目: 为了达到新冠疫情精准防控的需要,为了避免全员核酸检测Q带来的浪费,需要精准圈定可 能被感染的人群。现在根据传染病流调以及大数据分析,得到了每个人之间在时间、空间上是 否存在轨迹的交叉现在给定一组确诊人员编号&…

java面向对象实现文字格斗游戏

面向对象编程(Object-Oriented Programming, OOP)是一种程序设计思想,它利用“对象”来封装状态和行为,使得代码更易于维护和扩展。 下面我们使用java中的面向对象编程,来实现一个文字格斗的游戏联系! 实…

多行字符串水平相加

题目来源与2023河南省ccpc statements_2.pdf (codeforces.com) ls [ ........ ........ .0000000 .0.....0 .0.....0 .0.....0 .0.....0 .0.....0 .0000000 ........ , ........ ........ .......1 .......1 .......1 .......1 .......1 .......1 .......1 ........, ......…

解决Gitlab集成Jira时报SSL证书问题

1. 问题描述 在gitlab中集成jira的时候,由于jira是企业内部网址,并使用自己签名的SSL证书,一直会报证书验证不过的问题,报错信息如下: Connection failed. Check your integration settings. SSL_connect returned1 …

Python专题:一、安装步骤

1、下载地址:Welcome to Python.org 勾选这个add 其他的全部下一步即可。 运行出现这个即代表安装成功。 Python自带编辑器。 2、推荐使用的sublime 编辑器下载 全部下一步安装。
最新文章