使用哈希算法将字符串映射到数组中

来源:互联网 发布:新编诸子集成知乎 编辑:程序博客网 时间:2024/05/16 01:36

需求

将不同字符串映射到对应数组,数组不够时自动成倍扩容,比如有一个数组String[4],现在准备将不同的string映射到String[4]上,str5时会自动扩容并重新打散。

str1-->String[3]str2-->String[0]str3-->String[2]str4-->String[1]

方案

  1. 先使用哈希运算,比如用murmurhash3_x86_32算法得到一个32位的值a。
  2. 再用一个掩码取得数组下标,这个掩码可用数组长度-1,比如原始数组长度为4,则掩码为3,3的二进制即为11,与上面的哈希值a做&运算即能得到一个4以内的数b。
  3. 通过掩码计算出来的值可能会重复,所以可以加个判断,比如对于字符串str2,当所计算的值b数组元素不为空且又不等于str2时,则说明这个坑已经被其他字符串占用了,可以往上一个试试。
while(String[b]!=null && !String[b].equals(str2)){    b++;}if(String[b]==null)    String[b]=str2;
  1. 使用一个变量count用于计算已经使用了多少个坑,当count等于数组一半时就进行扩容,比如扩容到8,这时使用的新掩码为7,二进制即111。
0 0
原创粉丝点击