How HashMap
内部区分null
and 0
作为关键。
按照这个post https://stackoverflow.com/questions/17268212/hashcode-for-null-key-in-hashmap的哈希码null
key is 0
, 这是对的吗?
如果是,那么两者都应该在索引处放在同一个存储桶中0
并且应该有一个值HashMap
但这不是这样的HashMap
works.
有人能给我解释一下吗?哈希码是什么意思null
key in HashMap
?
示例代码:
HashMap<Integer,String> map=new HashMap<Integer,String>();
map.put(null, "abc");
map.put(0, "xyz"); // will it override the value for null as key?
System.out.println(map.get(null)); // abc
System.out.println(map.get(0)); // xyz
如果是,那么两者都应该放在索引 0 处的同一个存储桶中...
Correct.
并且应该有一个值HashMap
不正确。这两个键将有一个单独的条目。这是由Map
and HashMap
规格;即javadocsay每个不同的键都有一个单独的条目。实施是required满足规格……确实如此。
在 Java 8 之前,HashMap
处理碰撞是链在一起散列到同一存储桶的所有条目。这HashMap.get(key)
逻辑将迭代相关存储桶的链,寻找与键匹配的条目。 (在您的示例代码中,链中会有单独的条目null
和Integer(0)
keys.)
在 Java 8 中,它的工作方式一开始是相同的,但是对于键全部实现的情况进行了优化Comparable
而且链条变得太长。在这种情况下,长链被转换成二叉树......这样O(N)
链式扫描变成O(logN)
树搜索。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)