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

JDK源码之解读hashMap 的put和get方法的实现原理

JDK源码之解读hashMap 的put和get方法的实现原理 1,put              对于方法hashmap.put(K,V),首先是把k处理,通过hashcode方法处理...

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

注意 , 本文基于JDK 1.8 HashMap#get() /** * Returns the value to which the specified key is mapp...

HashMap中的数据结构与get,put源码解析

HashMap 执行流程:   首先构造方法: public HashMap() {         this.loadFactor = DEFAULT_LOAD_FACTOR; // all oth...

HashMap源码解析——概述

HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable...

HashMap源码注解 之 静态工具方法hash()、tableSizeFor()(四)

注意 , 本文基于JDK 1.8 HashMap#hash() /** * Computes key.hashCode() and spreads (XORs) higher bit...

Java 集合深入理解(16):HashMap 主要特点和关键方法源码解读

[+] 点击查看 Java 集合框架深入理解 系列 -  -  乾杯 什么是 HashMapHashMap 的特点HashMap 的 13 个成员变量HashMap 的初始容量和加载因子Has...

HashMap源码注解 之 put()方法(六)

注意 , 本文基于JDK 1.8 HashMap#put() /** * Associates the specified value with the specified key...

Java 1.8 HashMap 源码中 put()方法详解

在jdk1.7的时候,hashmap底层结构就是数组+链表的结构,如果发生冲突,即hashcode相同key也相同,但是value不同的话,那么就会放在底层数组的同一个下标处,官方话叫同一个桶内,以链...

HashMap源码注解 之 resize()方法(七)

注意 ,本文基于JDK 1.8 HashMap#resize() /** * Initializes or doubles table size. If null, alloca...

Java 8集合框架源码学习——HashMap

心得:相较于JDK 1.7,Java 8中的HashMap有了较大的性能提升。修改了hash和resize方式,增加了红黑树的支持。学习参考资料: (1)疫苗:Java HashMap的死循环;1....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HashMap源码解析——get方法
举报原因:
原因补充:

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