Java 关于HashMap内部实现的查询
我将介绍HashMap的实现,并参考以下链接: 我发现“HashMap包含一个bucket数组,以便包含其条目”。所以,我有几个问题-Java 关于HashMap内部实现的查询,java,hashmap,hashtable,Java,Hashmap,Hashtable,我将介绍HashMap的实现,并参考以下链接: 我发现“HashMap包含一个bucket数组,以便包含其条目”。所以,我有几个问题- 桶数组的类型是什么 既然数组有缺点(例如,固定大小和只允许同质数据),那么尽管存在这些缺点,我们为什么要使用数组呢 3.如果键或冲突的哈希代码相同,则使用链表。如何获取(搜索)第二、第三个节点的引用等 谢谢你 桶数组的类型是什么 这取决于你制作的映射,如果你制作了一个HashMap,那么bucket将是那些类型的,能够包含那些类型的对象 既然数组有缺点(例如,固
HashMap
,那么bucket将是那些类型的,能够包含那些类型的对象
HashMap
,那么bucket将是那些类型的,能够包含那些类型的对象
final节点getNode(int散列,对象键){
节点[]选项卡;节点第一,e;int n;K;
如果((tab=table)!=null&(n=tab.length)>0&&
(first=tab[(n-1)&散列]!=null){
如果(first.hash==hash&&//始终检查第一个节点
((k=first.key)==key | |(key!=null&&key.equals(k)))
先返回;
if((e=first.next)!=null){
if(树节点的第一个实例)
return((TreeNode)first).getTreeNode(hash,key);
做{
如果(e.hash==hash&&
((k=e.key)==key | |(key!=null&&key.equals(k)))
返回e;
}而((e=e.next)!=null);
}
}
返回null;
}
来自:
final节点getNode(int散列,对象键){
节点[]选项卡;节点第一,e;int n;K;
如果((tab=table)!=null&(n=tab.length)>0&&
(first=tab[(n-1)&散列]!=null){
如果(first.hash==hash&&//始终检查第一个节点
((k=first.key)==key | |(key!=null&&key.equals(k)))
先返回;
if((e=first.next)!=null){
if(fir)
final Node<K,V> getNode(int hash, Object key) {
Node<K,V>[] tab; Node<K,V> first, e; int n; K k;
if ((tab = table) != null && (n = tab.length) > 0 &&
(first = tab[(n - 1) & hash]) != null) {
if (first.hash == hash && // always check first node
((k = first.key) == key || (key != null && key.equals(k))))
return first;
if ((e = first.next) != null) {
if (first instanceof TreeNode)
return ((TreeNode<K,V>)first).getTreeNode(hash, key);
do {
if (e.hash == hash &&
((k = e.key) == key || (key != null && key.equals(k))))
return e;
} while ((e = e.next) != null);
}
}
return null;
}