Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ConcurrentIdentityWeakKeyHashMap和整数键_Java_Integer_Hashmap_Netty_Internal - Fatal编程技术网

Java ConcurrentIdentityWeakKeyHashMap和整数键

Java ConcurrentIdentityWeakKeyHashMap和整数键,java,integer,hashmap,netty,internal,Java,Integer,Hashmap,Netty,Internal,虽然是内部的,但我认为通常使用ConcurrentIdentityWeakKeyHashMap是安全的。但是,以下代码: ConcurrentIdentityWeakKeyHashMap map = new ConcurrentIdentityWeakKeyHashMap(); for(int key = 0; key < 132; key++){ map.put(key, key); } for(int key = 0; key < 132; key++){

虽然是内部的,但我认为通常使用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));
 }
这是我的错误还是误解(即“不应与整数一起使用”或“仅限内部使用”)

编辑:根据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)));
 }
ArrayList list=新的ArrayList(132);
ConcurrentIdentityWeakKeyHashMap=新的ConcurrentIdentityWeakKeyHashMap();
用于(int key=0;key<132;key++){
整数key2=键;
列表。添加(键2);
地图放置(键2,键2);
}
用于(int key=0;key<132;key++){
System.out.println(map.get(list.get(key));
}

现在,它可以工作了…

整数在Integer类中预先设定了多达127个整数,因此它们将永远不会被垃圾收集。

好的,那么这有什么意义呢?你的意思是说键数高达127的值永远不会被GCed,而上面的所有内容都会立即被GCed?此外,它使用identity(=)来比较键,因此当你得到(键)时,自动装箱会创建一个带有键号的新整数对象,但该对象与保存在地图上的对象不同,因此identity equals操作符返回false,因此,您会得到一个空值。
 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)));
 }