当使用HashMap时,hashmap会将整个objectA作为关键字存储,还是仅将objectA.hashCode()用作关键字,从而生成一个实际的int-> ObjectB哈希映射?在java中使用HashMap <ObjectA,ObjectB>时,密钥的类型是什么?
1
A
回答
5
它将在插入时存储对密钥和的引用。
的想法是,当您尝试查找由key的条目,哈希代码用于迅速得到的候选人键列表,然后每个候选通过平等检查。
2
当使用一个HashMap,将HashMap的存储整个对象A作为重点
是整个对象为重点
它将使用关键的hashCode()
内部存储Value
让我们看看代码
@Override
461 public V get(Object key) {
462 Entry<K, V> m = getEntry(key);
463 if (m != null) {
464 return m.value;
465 }
466 return null;
467 }
468
469 final Entry<K, V> getEntry(Object key) {
470 Entry<K, V> m;
471 if (key == null) {
472 m = findNullKeyEntry();
473 } else {
474 int hash = computeHashCode(key);
475 int index = hash & (elementData.length - 1);
476 m = findNonNullKeyEntry(key, index, hash);
477 }
478 return m;
479 }
final Entry<K,V> findNonNullKeyEntry(Object key, int index, int keyHash) {
482 Entry<K,V> m = elementData[index];
483 while (m != null
484 && (m.origKeyHash != keyHash || !areEqualKeys(key, m.key))) {
485 m = m.next;
486 }
487 return m;
488 }
2
它将使用整个对象。
1
通常它使用散列来查找条目,但条目本身包含值和密钥。这样,你可以调用HashMap#values()来获得一个Set<Entry<key_type, value_type>>
,它也包含关键字。
+0
这是'HashMap.entrySet()',实际上 - values()返回一个'Collection
相关问题
- 1. 带类密钥的Java HashMap泛型
- 2. 关于Java HashMap:当密钥是一组时<Integer>
- 3. 在HashMap中设置密钥类型,怎么样?
- 4. 为什么我在Java HashMap中获取重复密钥?
- 5. 检查HashMap的Java ArrayList <String,String>是否包含密钥
- 6. 找出在HashMap中使用的是什么类型
- 7. 确定Java HashMap中最低可用密钥的最快方法是什么?
- 8. Java hashmap - 基于不同类型的两个对象的密钥
- 9. 在Java HashMap中存储两次“密钥”?
- 10. Java HashMap空值或密钥
- 11. Java - 获取HashMap中的密钥索引?
- 12. 在ssh密钥生成中使用的密码是什么?
- 13. 在Go中生成私钥时使用什么类型的Reader?
- 14. 为什么HashMap中的Entry类在java中是静态的
- 15. 什么类型是HashMap存储桶
- 16. Java:检查密钥是否包含在两个HashMap中
- 17. statusOfValueForKey的密钥是什么
- 18. 什么是RSA“密钥ID”?
- 19. 为什么在hashmap中找不到密钥?
- 20. Java中`<< ='的用途是什么?
- 21. 在java中使用HashMap的主要好处是什么?
- 22. 用户无法在java中添加hashmap的密钥while循环
- 23. 什么是PGP密钥?
- 24. 什么是公共密钥
- 25. Firebase - 什么是API密钥
- 26. 使用带自定义密钥的HashMap
- 27. 如果密钥的类型是Integer,HashMap条目是否总是按键排序?
- 28. 什么是Java的类<X>类型的C#等价物?
- 29. 什么是RSA子密钥?
- 30. 公钥加密中各种密钥的区别是什么
你为什么说在插入时的哈希码存储? – aioobe 2011-03-03 11:58:58
不要质疑Jon Skeet ......你的CPU会炸掉! – jrharshath 2011-03-03 12:01:46
@aioobe:如果不是,哈希表将如何执行查找?我猜想它可能会懒散地得到每个已经没有被散列过的密钥的哈希码,但对我来说这似乎毫无意义。换句话说:对我来说,在插入时计算密钥的哈希代码似乎是明智的。是什么让你觉得它不会? :)(看着HashMap.put确认它,顺便说一句) – 2011-03-03 12:03:02