news 2026/5/8 13:53:36

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
面试 Java 基础八股文十问十答第十九期

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

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

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

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

1)HashMap的扩容操作是怎么实现的?

HashMap 的扩容操作是在当前容量超过负载因子(默认为 0.75)乘以数组长度(即达到阈值)时触发的。扩容操作会创建一个新的更大的数组,并将原有数组中的元素重新分配到新数组中。具体步骤如下:

  • 创建一个新的数组,其长度是原数组的两倍。
  • 遍历原数组中的每个元素,将它们重新计算哈希值,并根据新数组的长度计算出在新数组中的存储位置。
  • 将元素插入到新数组的对应位置。
  • 扩容完成后,新数组将取代原数组成为 HashMap 的内部存储结构。

2)HashMap是怎么解决哈希冲突的?

HashMap 解决哈希冲突的方法是使用链表(JDK 1.7 及之前)或红黑树(JDK 1.8 及之后)来存储具有相同哈希值的键值对。当发生哈希冲突时,新的键值对会被插入到链表或红黑树的末尾。在查找时,通过比较键的哈希值和键的相等性,可以在链表或红黑树中快速定位到对应的键值对。

3)什么是哈希冲突?

哈希冲突是指不同的键经过哈希函数计算后得到相同的哈希值。由于哈希函数的输出空间一般远小于输入空间,所以在大多数情况下会发生哈希冲突。哈希冲突会导致不同的键值对被存储在数组的同一个位置上,这就需要使用额外的数据结构(如链表或红黑树)来解决冲突,以保证能够正确地存储和检索键值对。解决哈希冲突是哈希表(如 HashMap)实现中的一个重要问题。

4)能否使用任何类作为 Map 的 key?

几乎可以使用任何类作为 Map 的 key,但要注意以下几点:

  • 类必须正确实现hashCode()equals()方法,以确保在哈希表中正确地定位和比较键对象。
  • 不可变类(如 String、Integer)通常是很好的选择,因为它们的哈希值是固定的,且已经正确实现了hashCode()equals()方法。
  • 可变类(如自定义类)作为 key 时,需要特别注意在修改键对象时是否会影响到其哈希值和相等性判断,以避免出现意外的结果。

5)为什么HashMap中String、Integer这样的包装类适合作为K?

String、Integer 这样的包装类适合作为 HashMap 的 key 的原因如下:

  • 这些包装类是不可变的,即创建后不可修改,因此它们的哈希值是固定的,不会因为对象的改变而改变。
  • 这些包装类已经正确地实现了hashCode()equals()方法,确保在哈希表中正确地定位和比较键对象。
  • 这些包装类在 Java 中被广泛使用,具有良好的性能和可靠性。

6)如果使用Object作为HashMap的Key,应该怎么办呢?

如果要使用 Object 类作为 HashMap 的 key,需要注意以下几点:

  • Object 类的hashCode()方法和equals()方法是基于对象的内存地址的,而不是对象的内容。这意味着不同的 Object 对象即使内容相同,它们的哈希值和相等性判断也会不同。
  • 如果要正确使用 Object 类作为 key,需要重写hashCode()equals()方法,以基于对象的内容来计算哈希值和判断相等性。
  • 重写hashCode()equals()方法时,需要确保相等的对象具有相同的哈希值,以便在哈希表中正确地定位和比较键对象。

7)HashMap为什么不直接使用hashCode()处理后的哈希 值直接作为table的下标?

HashMap 不直接使用hashCode()处理后的哈希值作为 table 的下标,是因为哈希值的范围可能超过数组的长度,直接使用哈希值作为下标可能会导致数组越界。因此,HashMap 使用哈希值与数组长度进行位运算,得到在数组中的实际存储位置,保证在数组范围内。

8)HashMap 的长度为什么是2的幂次方

HashMap 的长度选择为2的幂次方是为了提高哈希算法的效率。当 HashMap 的长度为2的幂次方时,通过对哈希值进行位运算,可以用更快的速度计算出元素在数组中的存储位置,减少计算的复杂度。同时,长度为2的幂次方的数组对于哈希值的分布也更加均匀,减少了哈希冲突的可能性。

9)HashMap 与 HashTable 有什么区别?

HashMap 与 HashTable 的区别如下:

  • 线程安全性:HashMap 是非线程安全的,而 HashTable 是线程安全的,内部的方法都进行了同步处理。
  • Null 键和值:HashMap 允许使用 null 作为键和值,而 HashTable 不允许,会抛出 NullPointerException。
  • 迭代器:HashMap 的迭代器是 fail-fast 的,而 HashTable 的迭代器不是。
  • 继承关系:HashMap 继承自 AbstractMap 类,而 HashTable 继承自 Dictionary 类。

10)如何决定使用 HashMap 还是TreeMap?

选择使用 HashMap 还是 TreeMap 取决于需求:

  • 如果需要按键的自然顺序进行遍历或排序,可以选择使用 TreeMap。TreeMap 内部使用红黑树实现,可以保证键的有序性。
  • 如果不需要保持键的顺序,只需要快速的查找、插入和删除操作,可以选择使用 HashMap。HashMap 内部使用哈希表实现,具有更高的插入和查找效率。
  • 另外,如果需要在多线程环境下使用,可以考虑使用 ConcurrentHashMap,它是线程安全的 HashMap 实现。

前后端项目 Gitee & Github 累计 3000+ Star,10W+浏览量!⭐点赞⭐收藏⭐不迷路!⭐

智能 AI 旅游推荐平台:https://github.com/luoye6/vue3_tourism_frontend

智能 AI 校园二手交易平台:https://github.com/luoye6/vue3_trade_frontend

GPT 智能图书馆:https://github.com/luoye6/Vue_BookManageSystem

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 4:49:24

【基于无人机搭载相机网络的交互式监控分布式方法】基于无人机搭载摄像头网络的交互式监控分布式方法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…

作者头像 李华
网站建设 2026/5/8 23:50:21

文献检索网站有哪些:常用学术文献检索平台汇总及使用指南

做科研的第一道坎,往往不是做实验,也不是写论文,而是——找文献。 很多新手科研小白会陷入一个怪圈:在知网、Google Scholar 上不断换关键词,结果要么信息过载,要么完全抓不到重点。今天分享几个长期使用的…

作者头像 李华
网站建设 2026/5/3 8:59:13

收藏备用!2026顶流AI Agent全解析:程序员必懂的概念、区别与落地案例

2026年的科技圈,AI Agent无疑是站在风口的顶流概念——行业趋势报告高频提及、科技大佬公开站台、企业落地案例持续涌现,这款被视作“颠覆未来”的技术,早已不是停留在纸面上的构想。对于程序员或AI小白而言,若还分不清AI Agent是…

作者头像 李华
网站建设 2026/5/1 14:41:09

输入电影/书籍名称,自动生成精简版剧情梗概,提取核心人物和主题,帮快速判断是否想看/读。

1. 实际应用场景描述在信息爆炸的时代,我们每天都会看到大量电影、书籍推荐,但往往只有标题和海报,难以快速判断是否值得花时间观看或阅读。- 想看某部电影,但不确定剧情是否喜欢。- 想读一本书,但简介太长或剧透太多。…

作者头像 李华