HashMap源码解读(一) getNode方法

编程入门 行业动态 更新时间:2024-10-18 14:17:04

HashMap<a href=https://www.elefans.com/category/jswz/34/1770099.html style=源码解读(一) getNode方法"/>

HashMap源码解读(一) getNode方法

/*** 该函数用于获取指定key的value* @param key 传入的key* @return 返回查找到的value对象,查找到则返回对象,没有则返回空*/public V get(Object key) {HashMap.Node e;return (e = this.getNode(hash(key), key)) == null ? null : e.value;}/**** @param hash  需要被获取元素的hash值* @param key 需要被获取的元素* @return 返回被需要到的元素,没有获取到则返回null*/final HashMap.Node<K, V> getNode(int hash, Object key) {//临时变量储存table数组HashMap.Node[] tab;//临时变量获取第一个元素HashMap.Node first;//n为table的长度int n;//如果table已经被初始化切table数组的长度大于0,在已知元素的查找位置上有元素则进入if判断//否则返回null,即没有找到元素if ((tab = this.table) != null && (n = tab.length) > 0 && (first = tab[n - 1 & hash]) != null) {Object k;//first元素存在,切first元素即锁需要查找的元素,直接返回first.if (first.hash == hash && ((k = first.key) == key || key != null && key.equals(k))) {return first;}//e为临时变量储存在first元素不是所需元素的下一个元素HashMap.Node e;if ((e = first.next) != null) {//当链表被树化后的查询if (first instanceof HashMap.TreeNode) {return ((HashMap.TreeNode)first).getTreeNode(hash, key);}//如果链表没有被树化,则使用链表的方式查询.do {//循环判断当前的临时变量e是否与所需元素相同//相同则返回e元素,不相同则返回nullif (e.hash == hash && ((k = e.key) == key || key != null && key.equals(k))) {return e;}} while((e = e.next) != null);}}return null;}

 

更多推荐

HashMap源码解读(一) getNode方法

本文发布于:2023-07-28 17:54:53,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1268429.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:源码   方法   HashMap   getNode

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!