当前位置: 首页 > 面试题库 >

集合的hashCode方法的最佳实现

夹谷斌蔚
2023-03-14
问题内容

我们如何确定hashCode()用于集合的方法的最佳实现(假设equals方法已被正确覆盖)?


问题答案:

最好的实现?这是一个难题,因为它取决于使用模式

在几乎所有情况下,Josh Bloch的 有效Java项目8(第二版)中都提出了合理的良好实现。最好的办法是在那里查找,因为作者在那里解释了为什么这种方法很好。

简短版
1. 创建一个int result并分配一个非零值。

  1. 对于在方法中测试的每个字段 f,通过以下equals()方式计算哈希码c:

  2. 如果字段f为boolean:计算(f ? 0 : 1);

  3. 如果该字段f是byte,char,short或int:计算(int)f;
  4. 如果字段f为long:计算(int)(f ^ (f >>> 32));
  5. 如果字段f为float:计算Float.floatToIntBits(f);
  6. 如果字段f是double:计算Double.doubleToLongBits(f)和处理返回值,就像每个长值一样;
  7. 如果字段f是一个对象:使用hashCode()方法的结果或如果为0 f == null;
  8. 如果字段f是一个数组:请将每个字段视为单独的元素,并以递归方式计算哈希值,然后组合值,如下所述。
  9. 将哈希值cresult
result = 37 * result + c
  1. 返回 result


 类似资料:
  • 问题内容: 我有一套清单: 我要s1∩s2∩s3 … 我可以编写一个函数来执行一系列成对的操作,等等。 有没有推荐,更好或内置的方法? 问题答案: 从python版本2.6开始,您可以对使用多个参数,例如 如果这些集合在列表中,则表示为: 这里是列表扩展 请注意,是 不是 一个静态的方法,但这种使用功能符号应用第一套交叉口列表的其余部分。因此,如果参数列表为空,则将失败。

  • 问题内容: 我想过滤java.util.Collection基于谓词的。 问题答案: Java 8(2014)在一行代码中使用流和lambda解决了此问题: 这是一个教程。 使用修改收集到位。(注意:在这种情况下,谓词将删除满足该谓词的对象): 允许过滤集合而无需编写循环或内部类: 你能想象一些更具可读性的东西吗?

  • 问题内容: 是否可以集成Python和JavaScript?例如,假设您希望能够在JavaScript中定义类并从Python使用它们(反之亦然)。如果是这样,最好的方法是什么?我不仅对这是否可行而且对是否 有人在“严肃的”项目或产品中做到了 感兴趣。 我想举个例子,可以使用Jython和Rhino,但我很好奇是否有人真正做到了这一点,以及是否有针对其他平台的解决方案(尤其是CPython)。 问

  • 问题内容: 集成erlang和python的最佳方法是什么? 我们需要在erlang中调用python函数,并在python中调用erlang函数。目前,我们正在尝试将SOAP用作这两种语言之间的中间层,但是我们有很多“不兼容”的麻烦。您能否建议执行集成的最佳方法? 问题答案: 如erlport所述,您可以在Erlang端使用Erlang端口协议和term_to_binary / binary_t

  • 我们使用ArrayList、hashmap等集合&更多。 另外有时候我们也需要检查列表是否为空,所以我们通常会通过以下几种方式进行检查 哪种情况是最好的,或者考虑到程序执行的性能,我们需要将这些情况进行一些组合吗?

  • 问题内容: 我在想是否存在一种更好/更巧妙的方法来否定Java。实际上,我正在执行以下操作: 但是我认为应该存在一种“美丽”的语法。 有谁知道它是否存在以及其语法如何? 编辑: 美丽,我可能会这样说: 问题答案: 不,没有更好的办法。你的是规范的。