在java中的HashMap中,我明白散列值存储在存储桶中,这有助于更快地进行搜索。
检索时,它检查散列码并相应地查找存储区编号。
如果存在从1到10的存储区编号,并且从散列代码找到的存储区编号是存储区编号5
。
控件如何转移到桶号5?它是否穿过桶1到桶4并达到5或者是否使用任何其他机制?Hashmap是否使用随机存取?
-4
A
回答
4
散列表是作为一个桶数组实现的,因此它使用数组的random access索引来给出给定散列的右桶。从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);
}
5
它是直接数组访问。没有迭代/遍历。但是它必须遍历内部的对象并与equals
比较。也许这让你感到困惑。
2
摘录所以它是从一个阵列随机访问。
3
散列函数用于定位存储桶。
如果有10桶,让例如说,对于一组字符串的字符值相加,散列到10桶
让我们写一个简单的哈希函数映射字符串到10桶,
For any non empty String,
hash function f = sum of (index of characters) % 10
例如:abc = 1 + 2 + 3%10 = 6.所以“abc”结束于第6桶。 xyz = 24 + 25 + 25%10 = 7.5〜8。所以“xyz”结束于第8个桶等等
所以当你搜索“xyz”时,散列函数直接在这里找到桶。
A hash function是哈希映射工作的核心。
0
有几种策略,当添加和检索值,其中一些是直接chaning,开放寻址等 基于这些它存储和取回值的方式将改变。例如,在直接链接每个空间的桶 数组是指向包含哈希到相同位置的键值对的链表的列表。因此,当您搜索该值时,它将使用给定值扫描整个列表。
相关问题
- 1. 使用hashmap存储输入是否会使算法随机化?
- 2. HashMap中元素的检索顺序是否真的随机化?
- 3. OAuth 2是否使用随机数?
- 4. 用于Unix的随机存取存档
- 5. C++名单随机存取
- 6. CSV随机存取; C#
- 7. 文件的随机存取
- 8. Collections.shuffle()是否随机列表?
- 9. 随机序列的子集是否也是随机的?
- 10. PRAM(Pararell随机存取机)模拟器
- 11. 使用HashMap实现HashSet是否存在问题?
- 12. Java Applet随机存取存储器
- 13. 使用Erdős-Rényi模型检查图是否是随机的?
- 14. 修订是否真的是随机的
- 15. 使用随机索引和RAND提取随机行()
- 16. 您的伪随机数发生器(PRNG)是否不够随机?
- 17. 使用UserProfileManager获取随机用户
- 18. C#随机数是不是“随机”
- 19. 使用预取加速随机内存访问
- 20. 从ArrayList中抓取随机对象不是随机的
- 21. 从词典获取随机项目?不是随机的
- 22. 使用Javascript检查随机数是否与上一次相同
- 23. 使用JPQL获取随机行
- 24. 使用泛型获取随机数据
- 25. 检查你的列表/数组中是否存在随机数
- 26. 内存不被“读取”。 - 随机崩溃
- 27. 随机存取优先级队列
- 28. 随机存取视图::的multi_array
- 29. 大的XML文件随机存取
- 30. 检查随机框内是否有点
您应该阅读http://en.wikipedia.org/wiki/Hashmap ... – 2012-04-16 11:42:10
...或任何有关数据结构的优秀教科书。 – 2012-04-16 11:43:50
你应该把家庭作业标记为这样。 – Viruzzo 2012-04-16 11:44:41