ELFHash 算法

ELFhash算法的基本思想是:将一个字符串的数组中的每个元素依次按前四位与上一个元素的低四位相与,组成一个长整形,如果长整的高四位大于零,那么就将它折回再与长整的低四位相异或,这样最后得到的长整对HASH表长取余,得到在HASH中的位置。

<pre name="code" class="html">public long ELFHash(String str) {
    	long hash = 0;  
        long x = 0;  
        for (int i = 0; i < str.length(); i++) {  
            hash = (hash << 4) + str.charAt(i); // hash左移4位,当前字符ASCII存入hash低四位
            // 因为下一步仍要左移4位,所以如果高4位不为0,进行下面处理,防止丢失信息 
            // 如果最高的四位不为0,则说明字符多余7个,如果不处理,再加第九个字符时,第一个字符会被移出,因此要有如下处理
            if ((x = hash & 0xF0000000L) != 0) {  
                hash ^= (x >> 24);  // 如果对于字符串(a-z 或者A-Z)就会仅仅影响5-8位,否则会影响5-31位
                hash &= ~x;  // 清除最高四位 (28-31)
            }  
        }  
        
        // 返回一个符号位为0的数,即丢弃最高位,以免函数外产生影响。
        return (hash & 0x7FFFFFFF);	// 
    }

 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值