package com.alibaba.json.test; import junit.framework.TestCase; import scala.collection.mutable.HashTable; import java.util.*; /** * Created by wenshao on 05/01/2017. */ public class FNVHashTest extends TestCase { char[] digLetters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_".toCharArray(); Random r = new Random(); public void test_fnv_hash() throws Exception { int COUNT = 1000 * 1000 * 1000; int collision_cnt = 0; // Map<Long, char[]> map = new HashMap<Long, char[]>(COUNT); long id_hash = fnv_hash("id".toCharArray()); System.out.printf("id : " + id_hash); System.out.println(); for (int i = 0; i < digLetters.length; ++i) { System.out.print(digLetters[i]); System.out.print(","); } // for (int i = 0; i < COUNT; ++i) { // char[] chars = gen(); // int hash = fnv_hash32(chars); // if (hash == id_hash) { // System.out.println(new String(chars)); // break; // } // } // for (int i = 0; i < COUNT; ++i) { // char[] chars = gen(); // Long hash = bkdr_hash(chars); // // char[] chars_2 = map.get(hash); // if (chars_2 != null) { // if (!Arrays.equals(chars, chars_2)) { // System.out.println("collision (" + collision_cnt++ + ") : " + new String(chars) + " -> " + new String(chars_2)); // } // } else { // map.put(hash, chars); // } // } } private char[] gen() { int len = r.nextInt(32); char[] chars = new char[len]; for (int i = 0; i < chars.length; ++i) { chars[i] = digLetters[r.nextInt(digLetters.length)]; } return chars; } static int fnv_hash32(char[] chars) { long hash = 0x811c9dc5; for (int i = 0; i < chars.length; ++i) { char c = chars[i]; hash ^= c; hash *= 0x1000193; } return (int) hash; } static long fnv_hash(char[] chars) { long hash = 0x811c9dc5; for (int i = 0; i < chars.length; ++i) { char c = chars[i]; hash ^= c; hash *= 0x1000193; } return hash; } static long bkdr_hash(char[] chars) { long hash = 0; for (int i = 0; i < chars.length; ++i) { char c = chars[i]; hash = hash * 131 + c; } return hash; } }