Java Hashmap是否使用随机访问?
在java的HashMap中,我了解到散列值存储在bucket中,这有助于加快搜索速度。Java Hashmap是否使用随机访问?,java,hashmap,Java,Hashmap,在java的HashMap中,我了解到散列值存储在bucket中,这有助于加快搜索速度。在检索时,它会检查hashcode并相应地查找bucket编号如果存在从1到10的桶号,并且从哈希代码中找到的桶号是桶号5如何将控制转移到桶号5?它是通过bucket 1移动到bucket 4并到达bucket 5还是使用任何其他机制?它是直接阵列访问。没有迭代/遍历。但它必须遍历桶内的对象,并与相等的对象进行比较。这可能会让您感到困惑。哈希表是作为一个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中可以为你找到)@三个用户都给了我这个问题的答案,所以我想我的问题没有那么糟糕。那个些觉得这是个简单的问题的人,你们应该回答,然后发表评论。失业者