集合的hashCode方法的最佳实现

集合的hashCode方法的最佳实现

我们如何决定如何最好地实现hashCode()方法(假设Eques方法已被正确重写)?



慕神8447489
浏览 356回答 3
3回答

互换的青春

最好的实现?这是一个很难回答的问题,因为它取决于使用模式。a对于几乎所有案件,都提出了合理的良好执行建议。乔希·布洛赫氏有效Java项目8(第二版)。最好的方法是在那里查找,因为作者解释了为什么这种方法是好的。短版创建一个int result并分配一个非零价值。为每一个领域 f测试equals()方法,计算哈希代码。c通过:如果字段f是boolean:计算(f ? 0 : 1);如果字段f是byte, char, short或int:计算(int)f;如果字段f是long:计算(int)(f ^ (f >>> 32));如果字段f是float:计算Float.floatToIntBits(f);如果字段f是double:计算Double.doubleToLongBits(f)并像对待每一个长期价值一样处理回报价值;如果字段f是对象*使用hashCode()方法或0如果f == null;如果字段f是列阵*将每个字段视为单独的元素,并在递归方式并将下面描述的值组合起来。组合散列值c带着result:result = 37 * result + c回归result对于大多数使用情况,这应该会导致哈希值的适当分布。

慕慕森

如果您对dmeister推荐的有效Java实现感到满意,可以使用库调用而不是滚动自己的:@Overridepublic int hashCode() {     return Objects.hashCode(this.firstName, this.lastName);}这需要番石榴(com.google.common.base.Objects.hashCode)或Java 7中的标准库(java.util.Objects.hash)但工作方式是一样的。

千巷猫影

最好使用Eclipse提供的功能,它做得很好,您可以将您的精力和精力用于开发业务逻辑。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java