您的位置:首页 > 编程语言 > Java开发

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

2018-01-23 07:33 411 查看
    privatestaticfinal
ObjectStreamField[] serialPersistentFields = {
        new
ObjectStreamField("segments", Segment[].class),
        new
ObjectStreamField("segmentMask", Integer.TYPE),
        new
ObjectStreamField("segmentShift", Integer.TYPE)
};

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

 

staticclass Node<K,V>
implementsMap.Entry<K,V> {
节点类 继承自Map接口的Entry内部类
        finalinthash;
    哈希值属性
        final K
key;
键属性
        volatile V
val;
    值属性
        volatile Node<K,V>
next;
下一个节点
 
        Node(inthash, K
key, V
val, Node<K,V>
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<K,V> find(inth, Object
k) {
            Node<K,V> 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循环遍历链表挨个遍历下一个节点判断如果节点的哈希值和参数哈希值相等且参数键和节点的键相等就返回这个节点

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: