2

虽然是内部的,但我认为一般使用 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 的评论,我稍微修改了代码,使其在列表和地图中引用(我希望至少)相同的 Integer:

 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)));
 }

现在,它起作用了...

4

1 回答 1

1

Integer 类中预缓存了最多 127 个整数,因此它们永远不会被垃圾回收。

于 2012-04-11T22:45:54.387 回答