BKDRHash 算法java實現

背景:
BKDRHash算法是字符串hash算法。是一種簡單快捷的hash算法。java的繼承Object類的提供的hashCode()函數也是採用這種hash算法。下面使用100000個不同字符串產生的衝突數,大概在0~3波動,使用100百萬不同的字符串,衝突數大概110+範圍波動。

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

public class BKDRHash {
public static int seed = 31;

public static int getHashCode(String str){
	int hash = 0;
	for(int i = 0;i!= str.length();++i)
	{
		hash =  seed * hash + str.charAt(i);
	}
	return hash;
}

public static void main(String[] args) {
	  int length = 100000;
	  String str1="http://blog.csdn.net/bojie5744";
	  System.out.println("str1 :"+str1.hashCode()+" system");
	  System.out.println("str1 :"+getHashCode(str1)+" custom");
	  
	  Map<String,String> map = new HashMap<String,String>();
	  for(int i=0;i!=length;++i){
		 String str = UUID.randomUUID().toString();
		 map.put(getHashCode(str)+"", str);
	  }
	  System.out.println("衝突數爲: "+(length-map.size()));
	}

}

10萬和100萬不同字符串結果如下2個圖所示。
這裏寫圖片描述這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章