Javascript HashMap的哈希函数

Javascript HashMap的哈希函数,javascript,node.js,data-structures,computer-science,immutable.js,Javascript,Node.js,Data Structures,Computer Science,Immutable.js,我正在开发一个实现很多数据结构的库,我主要是为了学习,因为我想了解更多关于数据结构的知识。我现在正在实现HashMap,但在实现一个高效的、防止冲突的哈希函数时遇到了一些麻烦。我不擅长数据结构和散列算法,所以请不要太苛刻 目前我的散列函数可以工作,你给它传递一个字符串,它就会返回一个散列。此散列是将值存储在数组中的索引。可以returned的示例哈希如下所示695488530。该值作为索引传递,并存储一个值this.table[695488530]=value。然而,索引确实很大,正因为如此,当

我正在开发一个实现很多数据结构的库,我主要是为了学习,因为我想了解更多关于数据结构的知识。我现在正在实现HashMap,但在实现一个高效的、防止冲突的哈希函数时遇到了一些麻烦。我不擅长数据结构和散列算法,所以请不要太苛刻

目前我的散列函数可以工作,你给它传递一个字符串,它就会返回一个散列。此散列是将值存储在数组中的索引。可以
return
ed的示例哈希如下所示
695488530
。该值作为索引传递,并存储一个值
this.table[695488530]=value
。然而,索引确实很大,正因为如此,当我尝试在我的
HashMap
测试中注销一个值时,测试会一直挂起,甚至在浏览器中,我也尝试注销它,结果导致chrome崩溃(lol)。因为它试图注销某些内容,如:

[
未定义,未定义,未定义,未定义,未定义,
未定义,未定义,未定义,未定义,未定义,
未定义,未定义。。。
当它达到索引695488530->“someValue”时,经过许多个值
]
最后,当我的一个
Ava
测试试图注销这些值时,我等待了足够长的时间,它返回了以下错误:

致命错误:无效的表大小分配失败-JavaScript堆内存不足
2088毫秒:清除26.7(59.0)->19.8(60.0)MB,3.7/0毫秒[分配失败]。
2891毫秒:清除39.5(64.0)->26.7(65.0)MB,7.6/0毫秒[分配失败]。
3351毫秒:清除43.3(67.0)->31.9(69.0)MB,36.6/0毫秒[分配失败]。
3752毫秒:清除48.2(72.0)->36.9(74.0)MB,30.5/0毫秒[分配失败]。
4120毫秒:清除52.0(76.0)->40.7(79.0)MB,26.6/0毫秒[分配失败]。
如果您想知道我使用的哈希算法是crc32:

函数makeCRCTable(){
var c;
var-crcTable=[];
对于(变量n=0;n<256;n++){
c=n;
对于(var k=0;k<8;k++){
c=((c&1)?(0xEDB88320^(c>>>1)):(c>>>1));
}
crcTable[n]=c;
}
返回crcTable;
}
功能crc32(str){
var crcTable=makeCRCTable();
var-crc=0^(-1);
对于(变量i=0;i>>8)^crcTable[(crc^str.charCodeAt(i))&0xFF];
}
返回(crc^(-1))>>>0;
}

所以,这就是我的困境。我需要帮助找到一个既节省资源又能防止冲突的哈希函数。我知道持久不变数据结构库使用了一个非常高效的散列函数,我想利用这个函数,但是我不确定它使用了什么算法,也不确定它是从哪个部分来的。如果来自immutable或计算机科学界的任何人能帮我解决这个问题,那就太棒了。

你能使用多个表吗?当旧的达到一定大小时,创建一个新的?(很抱歉,我对散列不太了解。)您不需要每次计算校验和时都创建一个新的crc表。只需在启动期间创建一次,然后重新使用同一个表。此外,在生成表时,实例化显式大小的数组将更快(
新数组(256)
,而不是
[]
)。最后,您将遇到非ASCII字符的问题,因为
charCodeAt()
将返回更大的值。在这种情况下,您需要将字符拆分为各自的字节。您可以使用多个表吗?当旧的达到一定大小时,创建一个新的?(很抱歉,我对散列不太了解。)您不需要每次计算校验和时都创建一个新的crc表。只需在启动期间创建一次,然后重新使用同一个表。此外,在生成表时,实例化显式大小的数组将更快(
新数组(256)
,而不是
[]
)。最后,您将遇到非ASCII字符的问题,因为
charCodeAt()
将返回更大的值。在这种情况下,需要将字符拆分为相应的字节。