BKDRHash 算法java实现

标签: 算法javahashcode
836人阅读 评论(0) 收藏 举报
分类:

背景:
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个图所示。
这里写图片描述这里写图片描述

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:302059次
    • 积分:7184
    • 等级:
    • 排名:第3100名
    • 原创:384篇
    • 转载:65篇
    • 译文:16篇
    • 评论:21条
    博客专栏