Java ConcurrentSkipListMap 键集到数组

标签 java toarray concurrentskiplistmap

我尝试使用以下行从 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]

请注意,这不是原子的,因此如果您的映射在调用 sizetoArray 之间进行修改,则会发生以下情况:

  • 如果新 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/

相关文章:

java - 如何使用仅包含 xml 内容的请求对 servlet 进行单元测试

java - jvm中java热点类的加载

java - 如何在 spring mvc 中为图像定义 getter 和 setter

java - 与 ConcurrentSkipListSet 一起正常工作的即时比较器

java - 使用 Java 集合的应用程序

Java JNLP 桌面快捷方式和图标

java - 如何对栈中的元素求和

arrays - Laravel Scout toSearchableArray() 没有被调用?

java - 为 toArray 方法创建通用数组

java - ConcurrentSkipListMap put 方法是线程安全的吗?