内部ではありますが、一般的に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)));
}
今、それは動作します...