java - HashMap中key-pair的值修改及对HashCode的影响
问题描述
几天前,我接受了一次采访,出现了一些有趣的问题。也就是说,招聘人员问了我一些细致的问题。其中一些是基于上述机制的HashCode与集合之间的密切关系。
第一个问题或多或少像:hashCode 的质量对 hashMap 的工作有什么影响?这个问题不是字面上的措辞,但我认为这个问题是关于性能的。
第二个问题涉及修改 hashMap 对的一个值的问题,以及此操作对性能的潜在影响以及此类过程可能出现的问题。没有明确说明如何修改值,但我认为这是一个 put() 方法。例如,我们在 hashMap 中有一对像 ["Programming", 7]。如果我们修改值 7 或“编程”会发生什么。
第三个问题是开放式的,听起来像这样:如何为没有任何字段的对象计算 hashCode 值。
对于第二个问题,我问的是:
we are not able to modify key of the pair because in the hashmap internal implementation key modifier is marked as final
如果我们想这样做,我们应该删除这个特定的对并添加所需的值。
我问过在 hashMap 中修改对(键值)的值对 HashCode 没有影响,因为我们应该基于 String 这样的不可变键进行计算,但我无法意识到这对招聘人员来说是否足够,因为事实上,这次采访不是面对面的。
老实说,这次面试有点困惑,因为招聘人员太神秘了,这就是为什么我想知道从你的角度来看,你是否可以看到这三个问题的另一个底部,我可以在我的回复中添加一些额外的信息。
如果您能提出这些神秘问题背后的原因,我将不胜感激。
解决方案
以下是假设我正确理解了这些问题:
对问题 1 的回答:值的修改是否对 HashMap 键值的存储方式没有任何影响,但是如果键和值不是不可变的,那么更改也会反映在 HashMap 对象中。如果你在外面修改key,你可能无法从HashMap中找到对象,这就是为什么Keys应该是不可变的原因。
对问题 2 的回答: 如果您不在类中覆盖 hashCode,则 JDK 提供的默认 hashCode 实现基于将传递的内存位置,因此无论对象是否为空。如果您覆盖 hashCode 那么无论您的 hashCode 函数做什么,结果都会是您所写的。
推荐阅读
- python - pyTelegramBotAPI 消息缓存 threading.lock
- node.js - 在后端使用 express 响应路由
- html - 将转义应用于 DT 表时 HTML 表未呈现为 FALSE
- vim - 当我用 sudo 打开它时,gvim 颜色方案看起来不同
- html - 单击时复选框不起作用,我该如何解决?
- c# - C# 应用程序在 OCR 完成后不读取 txt 文件,无论内容如何
- c++ - 32bit int 的 0xFFFFFFFF 和 0xFFFFFFFE 符号
- python - 为什么我不能导入 tensorflow lattice?
- c# - Visual Studio 安装程序项目在构建时未引发错误,但未创建 msi/exe 文件
- python - python - 如何根据python dash中另一个下拉列表的用户多值创建动态下拉列表?