寒光博客

[java]Hash值的一些算法
哈希值的一些算法 package _10_Hash; public class HashFunctions { ...
扫描右侧二维码阅读全文
06
2019/11

[java]Hash值的一些算法

哈希值的一些算法

package _10_Hash;

public class HashFunctions {
    //hash决定index的分散程度 避免冲突 (尤其是针对拉链发 分散程度越大 算法拉链法效率越高)
    //prime 是基数 也是桶的个数

    /**
     * 取余法计算Hash
     *
     * @param key
     * @param prime
     * @return
     */
    static int hash1(Object key, int prime) {
        return key.hashCode() % prime;
    }

    /**
     * 加法计算Hash
     *
     * @param key
     * @param prime
     * @return
     */
    static int additiveHash(Object key, int prime) {
        String objStr = key.toString();
        int hash = objStr.length();
        for (int i = 0; i < objStr.length(); i++) {
            hash += objStr.charAt(i);
        }
        return hash % prime;
    }

    /**
     * 旋转Hash 利用位运算 尽量让hash分散
     *
     * @param key
     * @param prime
     * @return
     */
    static int rotatingHash(String key, int prime) {
        int hash = key.length();
        for (int i = 0; i < key.length(); i++) {
            hash = (hash << 4) ^ (hash >> 28) ^ key.charAt(i);
        }
        return hash % prime;
    }

    /**
     * 乘法
     *
     * @param key
     * @param prime
     * @return
     */
    static long bernstein(String key, int prime) {
        long hash = 0;
        long seed = 31;
        for (int i = 0; i < key.length(); i++) {
            hash = seed * hash + key.charAt(i);
        }
        return hash % prime;
    }
}
本文作者:Author:     文章标题:[java]Hash值的一些算法
本文地址:https://dxoca.cn/java/313.html       百度未收录
版权说明:若无注明,本文皆为“Dxoca's blog (寒光博客)”原创,转载请保留文章出处。
Last modification:November 6th, 2019 at 07:04 pm
如果觉得我的文章对你有用,请随意赞赏

Leave a Comment