在Java 8中,有一个类java.util.Objects
,其中包含hashCode()
方法。同时,Google Guava 19包含com.google.common.base.Objects
,也具有hashCode()
方法。
我的问题:
hashCode()
吗?hashCode()
还是最好还是继续使用Guava?Guava的方法早于Java 7。
同名的Java方法仅接受一个参数。但是同级java.util.Objects.hash()
接受可变数量的参数,例如番石榴的Objects.hashCode()
。
[如果使用Java 7或更高版本,则可以使用java.util.Objects.hash(...)
。 Guava documentation注意:
对于Java 7及更高版本的说明:此方法应视为不推荐使用;使用Objects.hash(java.lang.Object ...)代替。
如果使用的是Java 6或更早版本,则可以使用Guava的方法。
要添加到接受的答案中:
虽然在Java 7+代码中Objects.hash()
应该比番石榴更受青睐,但请注意以下内容(改写自Joshua Bloch的Effective Java 3rd Edition(条款11):]
[不幸的是,
Objects.hash()
运行缓慢,因为它需要
- 数组创建(*)
- 装箱和拆箱任何原始参数
建议仅在性能不佳的情况下使用严重。
(*)实际上,Objects.hash()
只是简单地调用了另一个静态方法:
public static int hash(Object... values) {
return Arrays.hashCode(values);
}
您可以采取的对策之一是
(但也请记住,过早的优化是许多弊端的根源。
或者:
1]只需使用您的IDE即可为您生成它(节省时间,但样板代码仍然存在)。在IntelliJ中:Code > Generate > equals() and hashCode()
2)考虑将Project Lombok添加为依赖项