Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.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 ArrayList需要一个好的哈希函数<;整数>;_Java_Hash_Arraylist - Fatal编程技术网

Java ArrayList需要一个好的哈希函数<;整数>;

Java ArrayList需要一个好的哈希函数<;整数>;,java,hash,arraylist,Java,Hash,Arraylist,我有一个ArrayList,ArrayList是1-100之间不同的数字组合,现在需要将其更改为Hashmap中使用的键 然后我首先将ArrayList转换为字符串,然后使用哈希函数获取一个数字作为键。但是它看起来很慢,我可以跳过第一步(翻译步骤),在doHash函数中使用整数吗?或者有其他方法来改进它吗?谢谢 public static String Arraytostr(ArrayList<Integer> route) { String listString

我有一个ArrayList,ArrayList是1-100之间不同的数字组合,现在需要将其更改为Hashmap中使用的键

然后我首先将ArrayList转换为字符串,然后使用哈希函数获取一个数字作为键。但是它看起来很慢,我可以跳过第一步(翻译步骤),在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;
}
公共静态字符串Arraytostr(ArrayList路由){
字符串listString=“”;
对于(整数s:路由){
listString+=s;
}               
返回listString;
}
静态长doHash(字符串str){
长散列=5381;
对于(int i=0;ihash=((hash我假设您编写自己的hash而不是使用
hashCode
的原因是为了得到
long
,而不是
int
。如果
int
足够,我强烈建议只使用
ArrayList
上的
hashCode
方法

整数
s转换为
字符串
s,然后逐个字符地将它们分开似乎有点奇怪。但您可以只执行以下操作,这将跳过所有昂贵的
整数
字符串的转换

static long doHash(Collection<Integer> inputs) {    
    long hash = 5381;    
    for (Integer i : inputs) {
        hash = ((hash << 5) + hash) + i;
    }    
    return hash;
}
静态长doHash(集合输入){
长散列=5381;
用于(整数i:输入){

hash=((hash您想要hashCode吗?为什么不使用由
AbstractList
定义的
ArrayList#hashCode()
?您不能使用Java内置的hash功能吗?.hashCode()比您可能编写的任何内容都要高效。或者只返回数组中的第一个值。或者返回前N个值的总和。您当前的has函数是否太慢,以至于无法满足您的性能要求?