HashMap源码解析——get方法

原创 2017年07月23日 16:51:44
public V get(Object key) {
        Node<K,V> e;
        return (e = getNode(hash(key), key)) == null ? null : e.value;
    }

getNode()方法

 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 && // 总是先检查头结点
                ((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;
    }

有了上一篇存储时的hash算法作为基础,理解起来这段代码就很容易了。从上面的源代码中可以看出:从HashMap中get元素时,首先计算key的hashCode,找到数组中对应位置的某一元素,然后通过key的equals方法在对应位置的中找到需要的元素。

版权声明:本文为博主原创,转载请注明出处(http://blog.csdn.net/jdjh1024).

相关文章推荐

Bezier曲线、B样条和NURBS的基本概念

最不能理解的一点,一讨论软件的曲面,曲线功能,最后就变成曲线、曲面的数学原理的讨论了,但是里面也没数学好的,讨论的结果可想而知。 我不是数学家,我不懂这么复杂的方程,只要好用就行了。 ...

OpenGL中如何绘制Bezier曲线和NURBS曲线

一、Bezier曲线      主要注意两个函数:glMap1和glEvalCoord1。1.void glMap1{fd}(GLenum target,TYPE u1,TYPE u2,GLint s...

PHP数据结构之八 树与二叉树基本概念

树的基本概念 (一)树的定义    树(Tree)是n(n≧0)个结点的有限集合T,若n=0时称为空树,否则: ⑴  有且只有一个特殊的称为树的根(Root)结点; ⑵  若n>1时,其余的结...

PHP安全编程之PHP的安全模式

PHP的safe_mode选项的目的是为了解决本小节前后所述的某些问题。但是,在PHP层面上去解决这类问题从架构上来看是不正确的,正如PHP手册所述(http://php.net/features.s...

PHP数据结构之九 PHP储存二叉树,二叉树的创建与二叉树的基本操作 遍历二叉树算法

二叉树的创建及基本操作 PHP储存二叉树,二叉树的创建与二叉树的基本操作 遍历二叉树算法 /** *二叉树的创建及基本操作 * *1.构造方法,初始化建立二叉树 *2.按先序遍历方式建...

php结合redis高并发下发帖、发微博

发帖、发微博、点赞、评论等这些操作很频繁的动作如果并发量小,直接入库是最简单的 但是并发量一大,数据库肯定扛不住,这时可采取延迟发布:先将发布动作保存在队列里,后台进程循环获取再入库 模拟发布微博先...

Spring-搞定bean加载

spring的IOC灰常的强大。。特别是管理Web项目中的自动加载。但是实际应用中,可能会碰到这样两类的问题:1.写UnitTest的时候,需要脱离容器,手动读取xml文件加载bean。2.在一个We...
  • d8111
  • d8111
  • 2008-08-31 18:42
  • 3377

PHP数据结构之七_队列的链式存储和队列的基本操作

PHP数据结构之七 队列的链式存储和队列的基本操作 队列 1.定义:队列(Queue):也是运算受限的线性表。是一种先进先出(First In First Out ,简称FIFO)的线性表。只...

php实现单链表的基本操作

data=0;//用来记录链表长度 $linkList->next=null; } //头插法创建链表 function createHead(&$linkLi
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)