fastjson 中 identityHasMap的疑问

Adminduan 2016-07-22 07:00:11
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,麻烦大神帮忙解决一下
在此谢过啦!!!
...全文
233 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
adfldk 2016-07-29
  • 打赏
  • 举报
回复
0~127 0~1023
Adminduan 2016-07-27
  • 打赏
  • 举报
回复
引用 1 楼 dzq584462393 的回复:
1023的二进制1111111111,最主要的是这个10个1吧 我用identityHashMap put值然后get值 他最大储存到 127,这个没听懂
不好意思,这两天有事,一直没有看帖子; 哦,也对。可能就是十个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 .....
Adminduan 2016-07-27
  • 打赏
  • 举报
回复
引用 3 楼 dzq584462393 的回复:
我写了一下IdentityHashMap,在里面打日志看到0-127时get和put的System.identityHashCode(key);这个方法返回的值是一样的,其他数则返回不一样,所以才为空,但是为什么不一样,我也没看懂identityHashCode这个方法的实现
对的。127以内的数时对的!!好吧,但是也非常感谢你!!!
dzq584462393 2016-07-27
  • 打赏
  • 举报
回复
我写了一下IdentityHashMap,在里面打日志看到0-127时get和put的System.identityHashCode(key);这个方法返回的值是一样的,其他数则返回不一样,所以才为空,但是为什么不一样,我也没看懂identityHashCode这个方法的实现
dzq584462393 2016-07-24
  • 打赏
  • 举报
回复
1023的二进制1111111111,最主要的是这个10个1吧 我用identityHashMap put值然后get值 他最大储存到 127,这个没听懂

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧