Top Description Methods
com.google.common.hash

public Interface Hasher

extends PrimitiveSink
Known Direct Implementers
com.google.common.hash.AbstractHasher
Annotations
@Beta
@ElementTypesAreNonnullByDefault
Imports
com.google.common.annotations.Beta, com.google.errorprone.annotations.CanIgnoreReturnValue, java.nio.ByteBuffer, java.nio.charset.Charset, org.checkerframework.checker.nullness.qual.Nullable

A PrimitiveSink that can compute a hash code after reading the input. Each hasher should translate all multibyte values (putInt(int), putLong(long), etc) to bytes in little-endian order.

Warning

The result of calling any methods after calling hash is undefined.

Warning

Using a specific character encoding when hashing a CharSequence with putString(CharSequence, Charset) is generally only useful for cross-language compatibility (otherwise prefer putUnencodedChars). However, the character encodings must be identical across languages. Also beware that Charset definitions may occasionally change between Java releases.

Warning

Chunks of data that are put into the Hasher are not delimited. The resulting HashCode is dependent only on the bytes inserted, and the order in which they were inserted, not how those bytes were chunked into discrete put() operations. For example, the following three expressions all generate colliding hash codes:

newHasher().putByte(b1).putByte(b2).putByte(b3).hash()
newHasher().putByte(b1).putBytes(new byte[] { b2, b3 }).hash()
newHasher().putBytes(new byte[] { b1, b2, b3 }).hash()

If you wish to avoid this, you should either prepend or append the size of each chunk. Keep in mind that when dealing with char sequences, the encoded form of two concatenated char sequences is not equivalent to the concatenation of their encoded form. Therefore, putString(CharSequence, Charset) should only be used consistently with complete sequences and not broken into chunks.

Author
Kevin Bourrillion
Since
11.0

Method Summary

Modifier and TypeMethod and Description
public HashCode
hash()

Computes a hash code based on the data that have been provided to this hasher.

public int
hashCode()

Deprecated This returns Object#hashCode(); you almost certainly mean to call hash().asInt().
public Hasher
putBoolean(boolean b)

Redeclares com.google.common.hash.PrimitiveSink.putBoolean.

Equivalent to putByte(b ?
public Hasher
putByte(byte
a byte
b
)

Redeclares com.google.common.hash.PrimitiveSink.putByte.

Puts a byte into this sink.
public Hasher
putBytes(byte[]
a byte array
bytes
)

Redeclares com.google.common.hash.PrimitiveSink.putBytes.

Puts an array of bytes into this sink.
public Hasher
putBytes(byte[]
a byte array
bytes
,
int
the start offset in the array
off
,
int
the number of bytes to write
len
)

Redeclares com.google.common.hash.PrimitiveSink.putBytes.

Puts a chunk of an array of bytes into this sink.
public Hasher
putBytes(ByteBuffer
a byte buffer
bytes
)

Redeclares com.google.common.hash.PrimitiveSink.putBytes.

Puts the remaining bytes of a byte buffer into this sink.
public Hasher
putChar(char c)

Redeclares com.google.common.hash.PrimitiveSink.putChar.

Puts a character into this sink.
public Hasher
putDouble(double d)

Redeclares com.google.common.hash.PrimitiveSink.putDouble.

Equivalent to putLong(Double.doubleToRawLongBits(d)).
public Hasher
putFloat(float f)

Redeclares com.google.common.hash.PrimitiveSink.putFloat.

Equivalent to putInt(Float.floatToRawIntBits(f)).
public Hasher
putInt(int i)

Redeclares com.google.common.hash.PrimitiveSink.putInt.

Puts an int into this sink.
public Hasher
putLong(long l)

Redeclares com.google.common.hash.PrimitiveSink.putLong.

Puts a long into this sink.
public <T extends @Nullable Object> Hasher
putObject(T instance, Funnel<? super T> funnel)

A simple convenience for funnel.funnel(object, this).

public Hasher
putShort(short s)

Redeclares com.google.common.hash.PrimitiveSink.putShort.

Puts a short into this sink.
public Hasher
putString(CharSequence charSequence, Charset charset)

Redeclares com.google.common.hash.PrimitiveSink.putString.

Equivalent to putBytes(charSequence.toString().getBytes(charset)).
public Hasher
putUnencodedChars(CharSequence charSequence)

Redeclares com.google.common.hash.PrimitiveSink.putUnencodedChars.

Equivalent to processing each char value in the CharSequence, in order.

Method Detail

hashback to summary
public HashCode hash()

Computes a hash code based on the data that have been provided to this hasher. The result is unspecified if this method is called more than once on the same instance.

hashCodeback to summary
public int hashCode()

Deprecated

This returns Object#hashCode(); you almost certainly mean to call hash().asInt().

Annotations
@Override
@Deprecated
putBooleanback to summary
public Hasher putBoolean(boolean b)

Redeclares com.google.common.hash.PrimitiveSink.putBoolean.

Equivalent to putByte(b ? (byte) 1 : (byte) 0).

Annotations
@CanIgnoreReturnValue
@Override
putByteback to summary
public Hasher putByte(byte b)

Redeclares com.google.common.hash.PrimitiveSink.putByte.

Doc from com.google.common.hash.PrimitiveSink.putByte.

Puts a byte into this sink.

Parameters
b:byte

a byte

Returns:Hasher

this instance

Annotations
@CanIgnoreReturnValue
@Override
putBytesback to summary
public Hasher putBytes(byte[] bytes)

Redeclares com.google.common.hash.PrimitiveSink.putBytes.

Doc from com.google.common.hash.PrimitiveSink.putBytes.

Puts an array of bytes into this sink.

Parameters
bytes:byte[]

a byte array

Returns:Hasher

this instance

Annotations
@CanIgnoreReturnValue
@Override
putBytesback to summary
public Hasher putBytes(byte[] bytes, int off, int len)

Redeclares com.google.common.hash.PrimitiveSink.putBytes.

Doc from com.google.common.hash.PrimitiveSink.putBytes.

Puts a chunk of an array of bytes into this sink. bytes[off] is the first byte written, bytes[off + len - 1] is the last.

Parameters
bytes:byte[]

a byte array

off:int

the start offset in the array

len:int

the number of bytes to write

Returns:Hasher

this instance

Annotations
@CanIgnoreReturnValue
@Override
putBytesback to summary
public Hasher putBytes(ByteBuffer bytes)

Redeclares com.google.common.hash.PrimitiveSink.putBytes.

Doc from com.google.common.hash.PrimitiveSink.putBytes.

Puts the remaining bytes of a byte buffer into this sink. bytes.position() is the first byte written, bytes.limit() - 1 is the last. The position of the buffer will be equal to the limit when this method returns.

Parameters
bytes:ByteBuffer

a byte buffer

Returns:Hasher

this instance

Annotations
@CanIgnoreReturnValue
@Override
putCharback to summary
public Hasher putChar(char c)

Redeclares com.google.common.hash.PrimitiveSink.putChar.

Doc from com.google.common.hash.PrimitiveSink.putChar.

Puts a character into this sink.

Annotations
@CanIgnoreReturnValue
@Override
putDoubleback to summary
public Hasher putDouble(double d)

Redeclares com.google.common.hash.PrimitiveSink.putDouble.

Equivalent to putLong(Double.doubleToRawLongBits(d)).

Annotations
@CanIgnoreReturnValue
@Override
putFloatback to summary
public Hasher putFloat(float f)

Redeclares com.google.common.hash.PrimitiveSink.putFloat.

Equivalent to putInt(Float.floatToRawIntBits(f)).

Annotations
@CanIgnoreReturnValue
@Override
putIntback to summary
public Hasher putInt(int i)

Redeclares com.google.common.hash.PrimitiveSink.putInt.

Doc from com.google.common.hash.PrimitiveSink.putInt.

Puts an int into this sink.

Annotations
@CanIgnoreReturnValue
@Override
putLongback to summary
public Hasher putLong(long l)

Redeclares com.google.common.hash.PrimitiveSink.putLong.

Doc from com.google.common.hash.PrimitiveSink.putLong.

Puts a long into this sink.

Annotations
@CanIgnoreReturnValue
@Override
putObjectback to summary
public <T extends @Nullable Object> Hasher putObject(T instance, Funnel<? super T> funnel)

A simple convenience for funnel.funnel(object, this).

Annotations
@CanIgnoreReturnValue
putShortback to summary
public Hasher putShort(short s)

Redeclares com.google.common.hash.PrimitiveSink.putShort.

Doc from com.google.common.hash.PrimitiveSink.putShort.

Puts a short into this sink.

Annotations
@CanIgnoreReturnValue
@Override
putStringback to summary
public Hasher putString(CharSequence charSequence, Charset charset)

Redeclares com.google.common.hash.PrimitiveSink.putString.

Equivalent to putBytes(charSequence.toString().getBytes(charset)).

Warning

This method, which reencodes the input before hashing it, is useful only for cross-language compatibility. For other use cases, prefer putUnencodedChars, which is faster, produces the same output across Java releases, and hashes every char in the input, even if some are invalid.

Annotations
@CanIgnoreReturnValue
@Override
putUnencodedCharsback to summary
public Hasher putUnencodedChars(CharSequence charSequence)

Redeclares com.google.common.hash.PrimitiveSink.putUnencodedChars.

Equivalent to processing each char value in the CharSequence, in order. In other words, no character encoding is performed; the low byte and high byte of each char are hashed directly (in that order). The input must not be updated while this method is in progress.

Warning

This method will produce different output than most other languages do when running the same hash function on the equivalent input. For cross-language compatibility, use putString, usually with a charset of UTF-8. For other use cases, use putUnencodedChars.

Annotations
@CanIgnoreReturnValue
@Override
Since
15.0 (since 11.0 as putString(CharSequence)).