2013-07-24 18 views
0

我嘗試使用以下行來從ConcurrentSkipListMap鍵的數組:的Java ConcurrentSkipListMap ketset數組

myArray=(String[])myMap.keySet().toArray(new String[myMap.size()]); 

但它沒有工作,結果數組中的所有項目一樣,爲什麼?

+0

怎麼又是你的地圖宣稱,這是怎麼myArray的聲明?什麼不起作用(編譯器錯誤?異常?)?等等 – assylias

回答

1

這按預期工作:

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之間修改,下面會發生:

  • 如果新地圖較小,myArray會有一個大小比你在new String[myMap.size()]
  • 創建如果新地圖較大,myArray將包含null項目

因此,它可能是有道理的呼叫保存到size,避免了(可能是數組大在這種情況下)不必要的數組創建和簡單的使用:

String[] myArray= myMap.keySet().toArray(new String[0]); 
1

你可以試試這個:

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]