共同学习Java源代码-多线程与并发-ConcurrentHashMap(二)

    privatestaticfinal ObjectStreamField[] serialPersistentFields = {

        new ObjectStreamField("segments", Segment[].class),

        new ObjectStreamField("segmentMask", Integer.TYPE),

        new ObjectStreamField("segmentShift", Integer.TYPE)

};

新版本里没实际意义的方法 为了兼容过去版本而存在的

 

staticclass Node implementsMap.Entry {

节点类 继承自Map接口的Entry内部类

        finalinthash;

    哈希值属性

        final K key;

键属性

        volatile V val;

    值属性

        volatile Node next;

下一个节点

 

        Node(inthash, K key, V val, Node next) {

            this.hash = hash;

            this.key = key;

            this.val = val;

            this.next = next;

        }

  构造方法为属性挨个赋值

 

        publicfinal K getKey()       { returnkey; }

        publicfinal V getValue()     { returnval; }

getter方法

        publicfinalint hashCode()   { returnkey.hashCode() ^ val.hashCode(); }

  节点的hashCode方法是键的hashCode和值的hashCode进行异或 

      publicfinal String toString(){ returnkey + "=" + val; }

  toString方法

        publicfinal V setValue(V value) {

            thrownew UnsupportedOperationException();

        }

  值的setter方法

 

        publicfinalboolean equals(Object o) {

            Object k, v, u; Map.Entry e;

            return ((oinstanceof Map.Entry) &&

                    (k = (e =(Map.Entry)o).getKey()) != null &&

                    (v = e.getValue()) !=null &&

                    (k == key || k.equals(key)) &&

                    (v == (u = val) || v.equals(u)));

        }

  equals方法 就是判断键值对都不为空 且键值对要么==返回true 要么equals返回true

 

        Node find(inth, Object k) {

            Node e = this;

            if (k != null) {

                do {

                    K ek;

                    if (e.hash == h &&

                        ((ek = e.key) == k || (ek != null && k.equals(ek))))

                        returne;

                } while ((e = e.next) != null);

            }

            returnnull;

        }

    }

find方法进入do while循环遍历链表挨个遍历下一个节点判断如果节点的哈希值和参数哈希值相等且参数键和节点的键相等就返回这个节点

 

你可能感兴趣的:(Java)