虽然是内部的,但我认为一般使用ConcurrentIdentityWeakKeyHashMap是安全的。但是,以下代码:
ConcurrentIdentityWeakKeyHashMap map = new ConcurrentIdentityWeakKeyHashMap();
for(int key = 0; key < 132; key++){
map.put(key, key);
}
for(int key = 0; key < 132; key++){
System.out.println(map.get(key));
}
产生
0
1
..
124
125
126
127
null
null
null
null
这是我的错误还是误解(即“不应该与整数一起使用”或“仅供内部使用”)?
编辑:基于Lucianos的评论,我改变了一些代码,使其在列表和地图中保持对(我希望至少)非常相同的整数的引用: ArrayList<Integer> list = new ArrayList<Integer>(132);
ConcurrentIdentityWeakKeyHashMap<Integer, Integer> map = new ConcurrentIdentityWeakKeyHashMap<Integer, Integer>();
for(int key = 0; key < 132; key++){
Integer key2 = key;
list.add(key2);
map.put(key2, key2);
}
for(int key = 0; key < 132; key++){
System.out.println(map.get(list.get(key)));
}
现在,它有效......
答案 0 :(得分:1)
在Integer类中预先缓存最多127个整数,因此它们永远不会被垃圾回收。