需要一个好的Hash函数用于ArrayList <integer> </integer>

时间:2013-11-18 17:16:32

标签: java hash arraylist

我有一个ArrayList,ArrayList是1-100的数字组合,现在需要将它改为Hashmap中使用的密钥。

然后我首先将ArrayList转换为String,然后使用Hash函数将数字作为键。但它似乎很慢,我可以跳过第一步(翻译步骤),在doHash函数中使用整数吗?还是其他任何改进方法?感谢

public static String Arraytostr(ArrayList<Integer> route) {    
     String listString = "";    
        for (Integer s : route){
            listString += s;
        }               
      return listString;

}

static long doHash(String str) {    
        long hash = 5381;    
        for (int i = 0; i < str.length(); i++) {
            hash = ((hash << 5) + hash) + str.charAt(i);
        }    
        return hash;
}

1 个答案:

答案 0 :(得分:1)

我认为您编写自己的哈希值而不是使用hashCode的原因是为了获得long,而不是int。如果int足够,我强烈建议您在hashCode上使用ArrayList方法。

Integer转换为String,然后逐个字符地选择它们似乎有点奇怪。但您可以执行以下操作,这将跳过所有昂贵的IntegerString转换。

static long doHash(Collection<Integer> inputs) {    
    long hash = 5381;    
    for (Integer i : inputs) {
        hash = ((hash << 5) + hash) + i;
    }    
    return hash;
}