我尝试使用以下行从 ConcurrentSkipListMap 获取键数组:
myArray=(String[])myMap.keySet().toArray(new String[myMap.size()]);
但是没有成功,结果数组中的所有项目都是相同的,为什么?
最佳答案
这按预期工作:
Map<String, String> myMap = new ConcurrentSkipListMap<>();
myMap.put("a", "b");
myMap.put("b", "c");
String[] myArray= myMap.keySet().toArray(new String[myMap.size()]);
System.out.println(Arrays.toString(myArray));
和输出:
[a, b]
请注意,这不是原子的,因此如果您的映射在调用 size
和 toArray
之间进行修改,则会发生以下情况:
- 如果新 map 较小,
myArray
的大小将大于您在new String[myMap.size()]
中创建的数组 >
- 如果新 map 更大,
myArray
将包含空项目
因此,在这种情况下,保存对 size
的调用并避免(可能)不必要的数组创建可能是有意义的,只需使用:
String[] myArray= myMap.keySet().toArray(new String[0]);
关于Java ConcurrentSkipListMap 键集到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17840681/