Here you can find the source of murmurhash2_64(final byte[] data, int length, int seed)
murmur hash 2.0, The murmur hash is a relatively fast hash function from http://murmurhash.googlepages.com/ for platforms with efficient multiplication.
public static long murmurhash2_64(final byte[] data, int length, int seed)
//package com.java2s; /*//from w w w. j a v a 2s .c o m * Copyright 2004-2014 H2 Group. Multiple-Licensed under the MPL 2.0, * and the EPL 1.0 (http://h2database.com/html/license.html). * Initial Developer: H2 Group */ public class Main { public static long murmurhash2_64(String text) { final byte[] bytes = text.getBytes(); return murmurhash2_64(bytes, bytes.length, 0xe17a1465); } /** * murmur hash 2.0, The murmur hash is a relatively fast hash function from http://murmurhash.googlepages.com/ for * platforms with efficient multiplication. * * @author Viliam Holub */ public static long murmurhash2_64(final byte[] data, int length, int seed) { final long m = 0xc6a4a7935bd1e995L; final int r = 47; long h = (seed & 0xffffffffl) ^ (length * m); int length8 = length / 8; for (int i = 0; i < length8; i++) { final int i8 = i * 8; long k = ((long) data[i8 + 0] & 0xff) // + (((long) data[i8 + 1] & 0xff) << 8) // + (((long) data[i8 + 2] & 0xff) << 16)// + (((long) data[i8 + 3] & 0xff) << 24) // + (((long) data[i8 + 4] & 0xff) << 32)// + (((long) data[i8 + 5] & 0xff) << 40)// + (((long) data[i8 + 6] & 0xff) << 48) // + (((long) data[i8 + 7] & 0xff) << 56); k *= m; k ^= k >>> r; k *= m; h ^= k; h *= m; } switch (length % 8) { case 7: h ^= (long) (data[(length & ~7) + 6] & 0xff) << 48; case 6: h ^= (long) (data[(length & ~7) + 5] & 0xff) << 40; case 5: h ^= (long) (data[(length & ~7) + 4] & 0xff) << 32; case 4: h ^= (long) (data[(length & ~7) + 3] & 0xff) << 24; case 3: h ^= (long) (data[(length & ~7) + 2] & 0xff) << 16; case 2: h ^= (long) (data[(length & ~7) + 1] & 0xff) << 8; case 1: h ^= (long) (data[length & ~7] & 0xff); h *= m; } ; h ^= h >>> r; h *= m; h ^= h >>> r; return h; } }