public static long[] MurmurHash3_x64_128(final long[] key, final int seed) {
      State state = new State();

      state.h1 = 0x9368e53c2f6af274L ^ seed;
      state.h2 = 0x586dcd208f7cd3fdL ^ seed;

      state.c1 = 0x87c37b91114253d5L;
      state.c2 = 0x4cf5ad432745937fL;

      for (int i = 0; i < key.length / 2; i++) {
         state.k1 = key[i * 2];
         state.k2 = key[i * 2 + 1];

         bmix(state);
      }

      long tail = key[key.length - 1];

      // Key length is odd
      if ((key.length & 1) == 1) {
         state.k1 ^= tail;
         bmix(state);
      }

      state.h2 ^= key.length * 8;

      state.h1 += state.h2;
      state.h2 += state.h1;

      state.h1 = fmix(state.h1);
      state.h2 = fmix(state.h2);

      state.h1 += state.h2;
      state.h2 += state.h1;

      return new long[] { state.h1, state.h2 };
   }
public static long [ ] MurmurHash3_x64_128 ( final long [ ] key , final int seed ) { State state = new State ( ) ; state . h1 = 0x9368e53c2f6af274L ^ seed ; state . h2 = 0x586dcd208f7cd3fdL ^ seed ; state . c1 = 0x87c37b91114253d5L ; state . c2 = 0x4cf5ad432745937fL ; for ( int i = 0 ; i < key . length / 2 ; i ++ ) { state . k1 = key [ i * 2 ] ; state . k2 = key [ i * 2 + 1 ] ; bmix ( state ) ; } long tail = key [ key . length - 1 ] ; if ( ( key . length & 1 ) == 1 ) { state . k1 ^= tail ; bmix ( state ) ; } state . h2 ^= key . length * 8 ; state . h1 += state . h2 ; state . h2 += state . h1 ; state . h1 = fmix ( state . h1 ) ; state . h2 = fmix ( state . h2 ) ; state . h1 += state . h2 ; state . h2 += state . h1 ; return new long [ ] { state . h1 , state . h2 } ; }
Hash a value using the x64 128 bit variant of MurmurHash3

@param key value to hash
@param seed random value
@return 128 bit hashed key, in an array containing two longs