Guava.Objects.hashCode vs Java.Objects.hashCode
To add to the accepted answer:
While Objects.hash()
should be preferred to Guava in Java 7+ code, note the below (paraphrased) from Effective Java 3rd Edition by Joshua Bloch (Item 11):
Unfortunately,
Objects.hash()
runs more slowly because it entails
- array creation (*)
- boxing and unboxing of any primitive arguments
It is recommended for use only in situations where performance is not critical.
(*) Indeed, Objects.hash()
simply invokes another static method under the hood:
public static int hash(Object... values) {
return Arrays.hashCode(values);
}
What you can do to counter this is to either
- cache the computed hash code instead of recomputing it each time and/or
- lazily initialize it.
(but also remember that premature optimization is the root of many evils).
Alternatively:
Simply use your IDE to generate it for you (saves time, but boilerplate code still there). In IntelliJ:
Code > Generate > equals() and hashCode()
consider adding Project Lombok as a dependency
Guava's method predates' Java 7.
The Java method of the same name only accepts a single argument. But a sibling java.util.Objects.hash()
accepts a variable number of arguments, like Guava's Objects.hashCode()
.
If you're using Java 7 or later, you can use java.util.Objects.hash(...)
. The Guava documentation notes this:
Note for Java 7 and later: This method should be treated as deprecated; use Objects.hash(java.lang.Object...) instead.
If you're using Java 6 or earlier, you can use Guava's method.