Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.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 Hashmap是否使用随机访问?_Java_Hashmap - Fatal编程技术网

Java Hashmap是否使用随机访问?

Java Hashmap是否使用随机访问?,java,hashmap,Java,Hashmap,在java的HashMap中,我了解到散列值存储在bucket中,这有助于加快搜索速度。在检索时,它会检查hashcode并相应地查找bucket编号如果存在从1到10的桶号,并且从哈希代码中找到的桶号是桶号5如何将控制转移到桶号5?它是通过bucket 1移动到bucket 4并到达bucket 5还是使用任何其他机制?它是直接阵列访问。没有迭代/遍历。但它必须遍历桶内的对象,并与相等的对象进行比较。这可能会让您感到困惑。哈希表是作为一个bucket数组实现的,因此它使用数组的索引来获取给定哈

在java的HashMap中,我了解到散列值存储在bucket中,这有助于加快搜索速度。
在检索时,它会检查hashcode并相应地查找bucket编号

如果存在从1到10的桶号,并且从哈希代码中找到的桶号是桶号5

如何将控制转移到桶号5?它是通过bucket 1移动到bucket 4并到达bucket 5还是使用任何其他机制?

它是直接阵列访问。没有迭代/遍历。但它必须遍历桶内的对象,并与
相等的对象进行比较。这可能会让您感到困惑。

哈希表是作为一个bucket数组实现的,因此它使用数组的索引来获取给定哈希的正确bucket。

摘自java.util.HashMap代码

         /**
          * Adds a new entry with the specified key, value and hash code to
          * the specified bucket.  It is the responsibility of this
          * method to resize the table if appropriate.
          *
          * Subclass overrides this to alter the behavior of put method.
          */
         void addEntry(int hash, K key, V value, int bucketIndex) {
             Entry<K,V> e = table[bucketIndex];
             table[bucketIndex] = new Entry<>(hash, key, value, e);
             if (size++ >= threshold)
                 resize(2 * table.length);
         }
/**
*将具有指定键、值和哈希代码的新条目添加到
*指定的桶。这是我们的责任
*方法来调整表的大小(如果合适)。
*
*子类重写它以改变put方法的行为。
*/
void addEntry(int散列,K键,V值,int bucketinex){
条目e=表[bucketIndex];
表[bucketIndex]=新条目(散列、键、值、e);
如果(大小+>=阈值)
调整大小(2*表格长度);
}

因此它是从数组中随机访问的。

哈希函数用于定位存储桶。

如果有10个bucket,比如说对于一组字符串,字符值被添加并散列到10个bucket中

让我们编写一个简单的哈希函数,将字符串映射到10个桶中

 For any non empty String, 

             hash function f = sum of (index of characters) % 10
例如:abc=1+2+3%10=6。所以“abc”最后进入第六个桶。 xyz=24+25+25%10=7.5~8。所以“xyz”在第8个桶中结束,依此类推

因此,当您搜索“xyz”时,哈希函数直接在这里找到bucket


A是hash-map工作的核心。

在添加和检索值时有几种策略,其中一些是直接更改、开放寻址等 基于这些,它存储和获取值的方式将会改变。例如,在直接链接bucket的每个空间时
数组是指向链接列表的指针,其中包含散列到同一位置的键值对。因此,当您搜索该值时,它将使用给定值扫描整个列表。

您应该阅读。。。。。。或者任何关于数据结构的好教材。你应该在家庭作业上做这样的标记。。。。或者阅读HashMap的源代码,说明它是如何工作的。(它在你的JDK和IDE中可以为你找到)@三个用户都给了我这个问题的答案,所以我想我的问题没有那么糟糕。那个些觉得这是个简单的问题的人,你们应该回答,然后发表评论。失业者