HashMap(1.8)底层原理之get(key)分析
先上源码: public V get (Object key) { Node< K , V > e ; return (e = getNode( hash (key) , key)) == null ? null : e. value ; } 我们都知道hashMap底层数据结构为:数组+单项链表+红黑树; 获取一个value值首先要获取当前key值所在的节点,得到该节点 e. value 属性值即为目标值; 第一步:对key值进行hash运算,得到节点位置;(如何hash运算:获取key值得hashcode将其称为h值,然后对该h值>>>16无符号右移16将其称为h16,然后对这两个值进行异或运算 h^h16)。hash运算要经过三个步骤才能算出节点位置。 第二部:getNode(h,key); 有了结点位置,我们就可以进行下一步的运算;h即为数组的下标; 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 ) {