Java ConcurrentSkipListMap设置为数组
我尝试使用以下行从ConcurrentSkipListMap获取一个密钥数组:Java ConcurrentSkipListMap设置为数组,java,toarray,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(
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));
请注意,这不是原子的,因此如果在调用size
和toArray
之间修改映射,则会发生以下情况:
- 如果新映射较小,
的大小将大于您在myArray
new String[myMap.size()]
- 如果新映射更大,
将包含空项myArray
size
的调用并避免(可能)不必要的数组创建可能是有意义的,只需使用:
String[] myArray= myMap.keySet().toArray(new String[0]);
您可以尝试以下方法:
ConcurrentSkipListMap myMap = new ConcurrentSkipListMap();
myMap.put("3", "A");
myMap.put("2", "B");
myMap.put("1", "C");
myMap.put("5", "D");
myMap.put("4", "E");
Object[] myArray = myMap.keySet().toArray();
System.out.println(Arrays.toString(myArray));
结果将是:
[1,2,3,4,5]如何声明映射,如何声明myArray?什么不起作用(编译器错误?异常?)?等
ConcurrentSkipListMap myMap = new ConcurrentSkipListMap();
myMap.put("3", "A");
myMap.put("2", "B");
myMap.put("1", "C");
myMap.put("5", "D");
myMap.put("4", "E");
Object[] myArray = myMap.keySet().toArray();
System.out.println(Arrays.toString(myArray));