java – 为什么Netbeans以它的方式生成hashCode()?
我一直在使用Netbeans进行
Java开发,有一些事情我只是依靠工作,而不用提问如何.其中包括自动生成的hashCode()和equals()方法.
equals方法很简单,但是我发现hashCode方法有点神秘.我不明白为什么选择乘法器并应用它所做的操作. import java.util.Arrays; import java.util.Objects; public class Foo { int id; String bar; byte[] things; @Override public int hashCode() { int hash = 7; hash = 89 * hash + this.id; hash = 89 * hash + Objects.hashCode(this.bar); hash = 89 * hash + Arrays.hashCode(this.things); return hash; } } 搜索文档,本网站和Google的“netbeans生成哈希码”这样的东西没有什么似乎相关.有谁在这里熟悉这个世代战略是为什么Netbeans使用它? 编辑: 例如,如果我添加第二个String到该类,则hashCode()变为 public int hashCode() { int hash = 7; hash = 13 * hash + this.id; hash = 13 * hash + Objects.hashCode(this.bar); hash = 13 * hash + Objects.hashCode(this.baz); hash = 13 * hash + Arrays.hashCode(this.things); return hash; } 那么,为什么Netbeans选择这些特定的素数,而不是其他的? 解决方法
这是旨在更好地分配哈希值的优化. Eclipse也是这样做的.看看
Why use a prime number in hashCode?和
Why does Java’s hashCode() in String use 31 as a multiplier?.
这是没有必要的.甚至返回0;是为了满足equals / hashcode合同.唯一的原因是基于散列的数据结构在良好的分布式哈希值下表现更好. 有人会称之为过早优化.我想这是可以的,因为它的a)免费(生成)和b)广泛认可(几乎每个IDE都这样做). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java判断字符串中是否包含字母
- 为什么这是错的?关于java 8流媒体
- java – 有一些语言允许负模数的原因吗?
- JSP Exception.toString()方法:返回异常的简短描
- gmail – keytool错误:java.lang.Exception:输
- java – JPA illegalStateException – Casc
- java – HtmlUnit – 将HtmlPage转换为HTML字符串
- java – VFS上的Hello world示例:从头开始创建
- spring boot使用sharding jdbc的配置方式
- 在使用java 7或8编译后,AppBundle抛出“LSOpenUR