我有一个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;
}
答案 0 :(得分:1)
我认为您编写自己的哈希值而不是使用hashCode
的原因是为了获得long
,而不是int
。如果int
足够,我强烈建议您在hashCode
上使用ArrayList
方法。
将Integer
转换为String
,然后逐个字符地选择它们似乎有点奇怪。但您可以执行以下操作,这将跳过所有昂贵的Integer
到String
转换。
static long doHash(Collection<Integer> inputs) {
long hash = 5381;
for (Integer i : inputs) {
hash = ((hash << 5) + hash) + i;
}
return hash;
}