Fastjson中:
public final boolean put(K key, V value) {
        final int hash = System.identityHashCode(key);
        final int bucket = hash & indexMask;        for (Entry<K, V> entry = buckets[bucket]; entry != null; entry = entry.next) {
            if (key == entry.key) {
                return true;
            }
        }        Entry<K, V> entry = new Entry<K, V>(key, value, hash, buckets[bucket]);
        buckets[bucket] = entry;  // 并发是处理时会可能导致缓存丢失,但不影响正确性        return false;
    }这段代码中的indexMask 默认为 1024 -1 ,为什么会选择1023这个值呐??我用identityHashMap put值然后get值  他最大储存到 127,麻烦大神帮忙解决一下
在此谢过啦!!!

解决方案 »

  1.   

    1023的二进制1111111111,最主要的是这个10个1吧
    我用identityHashMap put值然后get值  他最大储存到 127,这个没听懂
      

  2.   


    不好意思,这两天有事,一直没有看帖子; 哦,也对。可能就是十个1 选择的。
    我说的那个 identityHashMap put值 然后get值 最大储存到 127,这个的意思就是说:
    IdentityHashMap<Integer, Integer> aa = new IdentityHashMap<Integer, Integer>();
    for (int i = 0 ; i< 1023; i++) {
    aa.put(i,  i);
    }
    for (int i = 0; i< 1023; i++) {
    System.out.println(aa.get(i));
    }这段代码计算出来的结果为:
    ....
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    null
    null
    null
    null
    null
    null
    null
    null
    .....
      

  3.   

    我写了一下IdentityHashMap,在里面打日志看到0-127时get和put的System.identityHashCode(key);这个方法返回的值是一样的,其他数则返回不一样,所以才为空,但是为什么不一样,我也没看懂identityHashCode这个方法的实现