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).

HashMap源码注解 之 get()方法(五)

注意 , 本文基于JDK 1.8 HashMap#get() /** * Returns the value to which the specified key is mapp...
  • fan2012huan
  • fan2012huan
  • 2016年04月12日 09:48
  • 955

JDK1.8 HashMap源码分析

JDK1.8  HashMap源码分析 一、HashMap概述 在JDK1.8之前,HashMap采用数组+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里。但是当位于一个桶中...
  • lizhongkaide
  • lizhongkaide
  • 2016年01月27日 17:28
  • 2587

HashMap类源码解析

HashMap特点: 1.key-value键值对表示一个数据项 2.内部通过数组实现 3.没有实现同步方法,多线程线程不安全,效率较高 4. 所在包package java.uti...
  • qunxingvip
  • qunxingvip
  • 2016年07月16日 20:27
  • 1369

HashMap源码深度解析

这里新增加节点采用了头插法,新节点都增加到头部,新节点的next指向老节点 这里涉及到了HashMap的扩容问题,随着HashMap中元素的数量越来越多,发生碰撞的概率就越来越大,所产生的链表长度就会...
  • u011617742
  • u011617742
  • 2017年01月16日 21:34
  • 786

HashMap源码解析(基于JDK1.7)

一、HashMap简介哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashM...
  • xiaokang123456kao
  • xiaokang123456kao
  • 2017年08月23日 17:15
  • 374

HashMap源码分析(jdk1.8)

HashMap源码前前后后看了好几次,也和同事分享过好几次,每次都有新的收获。 分享也是一种提高! 本文首写于个人云笔记(点击访问),经多次修改,短期内不会有重大修改了,现发于此,有任何问题欢迎交流指...
  • u010887744
  • u010887744
  • 2015年12月17日 20:24
  • 10914

HashMap源码深入解析

HashMap是Java Colletion Framework的重要成员,HashMap是Map接口的常用实现类,在我们平常开发时会经常使用到Map,在我们面试的时候也会问到map的存储原理,今天特...
  • liaodehong
  • liaodehong
  • 2016年07月25日 20:13
  • 1011

Java之HashMap get方法

HashMap 非线程安全 通过下图可以看出HashMap的get方法的实现,其判断标准是通过hashCode和equals方法。 故可以通过重写类的hashCode和eq...
  • shihuacai
  • shihuacai
  • 2013年07月03日 11:33
  • 31407

HashMap源码--(四)get方法

HashMap源码–(四)get方法HashMap是基于哈希表的Map接口实现。它是用哈希值计算进行存取,存取速度都很快。 HashMap取值方法是通过哈希方法来计算key值所在位置进行获取。key...
  • dingyingying521
  • dingyingying521
  • 2017年09月28日 11:52
  • 79

【Java集合源码剖析】HashMap源码剖析

HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 HashMap是...
  • mmc_maodun
  • mmc_maodun
  • 2014年07月04日 00:16
  • 21270
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HashMap源码解析——get方法
举报原因:
原因补充:

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