首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Guava.Objects.hashCode对Java.Objects.hashCode

Guava.Objects.hashCode对Java.Objects.hashCode
EN

Stack Overflow用户
提问于 2016-03-27 19:09:39
回答 2查看 2.8K关注 0票数 9

在Java8中有一个类java.util.Objects,它包含hashCode()方法。同时Google 19包含com.google.common.base.Objects,其中也有hashCode()方法。

我的问题:

  1. 为什么我更喜欢番石榴的19 hashCode()而不是Java的8呢?
  2. 我可以完全依赖于Java8 hashCode(),还是最好还是继续使用番石榴呢?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-27 19:19:05

番石榴的方法早于‘Java 7’。

同名的Java方法只接受一个参数。但是,同级java.util.Objects.hash()接受可变数量的参数,如番石榴的Objects.hashCode()

如果使用的是Java 7或更高版本,则可以使用java.util.Objects.hash(...)番石榴文件注意到这一点:

注意Java7及更高版本:应该将此方法视为不推荐的;使用Objects.hash(java.lang.Object.)而不是。

如果您使用的是Java 6或更早版本,则可以使用Guava的方法。

票数 16
EN

Stack Overflow用户

发布于 2019-10-28 07:42:06

在已接受的答案中添加:

虽然Objects.hash()应该比7+代码中的番石榴更可取,但请注意约书亚·布洛赫的“有效的Java3版”(项目11)中的以下内容(释义):

不幸的是,Objects.hash()运行得更慢,因为它需要

  1. 数组创建(*)
  2. 任何原始参数的装箱和取消装箱

建议只在性能不重要的情况下使用。

(*)实际上,Objects.hash()只是调用引擎盖下的另一个静态方法:

代码语言:javascript
复制
public static int hash(Object... values) {
        return Arrays.hashCode(values);
    }

你能做什么来对抗这是对任何一个

  1. 缓存计算出来的哈希代码,而不是每次和/或重新计算它
  2. 懒散地初始化它。

(但也要记住,过早优化是许多坏处的根源)。

Alternatively:

  1. 只需使用IDE为您生成它(节省时间,但样板代码仍然存在)。在IntelliJ:Code > Generate > equals() and hashCode()
  2. 考虑将Lombok项目添加为依赖项
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36251450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档