Class MurmurHash3

java.lang.Object
io.split.client.utils.MurmurHash3

public final class MurmurHash3
extends Object
The MurmurHash3 algorithm was created by Austin Appleby and placed in the public domain. This java port was authored by Yonik Seeley and also placed into the public domain. The author hereby disclaims copyright to this source code.

This produces exactly the same hash values as the final C++ version of MurmurHash3 and is thus suitable for producing the same hash values across platforms.

The 32 bit x86 version of this hash should be the fastest variant for relatively short keys like ids. murmurhash3_x64_128 is a good choice for longer strings or if you need more than 32 bits of hash.

Note - The x86 and x64 versions do _not_ produce the same results, as the algorithms are optimized for their respective platforms.

See http://github.com/yonik/java_util for future updates to this file.

  • Nested Class Summary

    Nested Classes 
    Modifier and Type Class Description
    static class  MurmurHash3.LongPair
    128 bits of state
  • Constructor Summary

    Constructors 
    Constructor Description
    MurmurHash3()  
  • Method Summary

    Modifier and Type Method Description
    static int fmix32​(int h)  
    static long fmix64​(long k)  
    static long getLongLittleEndian​(byte[] buf, int offset)
    Gets a long from a byte buffer in little endian byte order.
    static long[] hash128x64​(byte[] data)  
    static long[] hash128x64​(byte[] data, int offset, int length, long seed)
    Generates 128-bit hash from the byte array with the given offset, length and seed.
    static long murmurhash3_x86_32​(CharSequence data, int offset, int len, int seed)
    Returns the MurmurHash3_x86_32 hash of the UTF-8 bytes of the String without actually encoding the string to a temporary buffer.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

  • Method Details

    • fmix32

      public static final int fmix32​(int h)
    • fmix64

      public static final long fmix64​(long k)
    • getLongLittleEndian

      public static final long getLongLittleEndian​(byte[] buf, int offset)
      Gets a long from a byte buffer in little endian byte order.
    • murmurhash3_x86_32

      public static long murmurhash3_x86_32​(CharSequence data, int offset, int len, int seed)
      Returns the MurmurHash3_x86_32 hash of the UTF-8 bytes of the String without actually encoding the string to a temporary buffer. This is more than 2x faster than hashing the result of String.getBytes().
    • hash128x64

      public static long[] hash128x64​(byte[] data)
    • hash128x64

      public static long[] hash128x64​(byte[] data, int offset, int length, long seed)
      Generates 128-bit hash from the byte array with the given offset, length and seed.

      This is an implementation of the 128-bit hash function MurmurHash3_x64_128 from from Austin Applyby's original MurmurHash3 c++ code in SMHasher.

      Parameters:
      data - The input byte array
      offset - The first element of array
      length - The length of array
      seed - The initial seed value
      Returns:
      The 128-bit hash (2 longs)