Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
需要在java中更好地实现这个FNV哈希算法吗_Java_Oop_Data Structures_Hash - Fatal编程技术网

需要在java中更好地实现这个FNV哈希算法吗

需要在java中更好地实现这个FNV哈希算法吗,java,oop,data-structures,hash,Java,Oop,Data Structures,Hash,我有这个,我想让它更高效,如果您需要我创建的整个hashset数据结构,我可以添加它,但我总体上在寻找这样的东西,它可以接受任意数量的字符串,并将它们存储在我的自定义hashset实现中: private int hash(String key) { int prime = 31; int hash = 0; for(int i = 0; i < key.length(); i++) { hash *= prime;

我有这个,我想让它更高效,如果您需要我创建的整个hashset数据结构,我可以添加它,但我总体上在寻找这样的东西,它可以接受任意数量的字符串,并将它们存储在我的自定义hashset实现中:

    private int hash(String key)
{
    int prime = 31;
    int hash = 0;

    for(int i = 0; i < key.length(); i++)
    {
        hash *= prime;
        hash ^= key.charAt(i);
    }

    if (hash < 0)
        hash *= -1;

    return hash % array.length;
}
一些意见:

如今,人们普遍认为33比31是更好的素数选择,因为在大多数非英语语言中,33会导致更少的冲突。无论哪种方式,英语的冲突数量都差不多。 将字符串转换为字符数组并以这种方式访问元素而不是多次调用charAt可能会更快 以下代码效率低下:

if (hash < 0)
     hash *= -1;

如果您想为字符串数组生成哈希代码,那么我们已经内置了类似Arrays.hashCodeObject[]:Arrays.hashCodestrArray的函数。简单高效对不起,我没有说,不使用java api,我必须逐字添加,请你说得更清楚一点。您正在将字符串传递给哈希函数,但返回语句具有array.length:此数组来自何处?它是hashset数组,它具有一个设置的数量,把它想象成一个数字,答案是:public int FNVString word{int hash=0;for int i=0;i
hash &= ~0x80000000;