2011-11-27 40 views
3

爲什麼我得到一個異常爲什麼下面的java代碼有一個例外?

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer; 
     at Main.main(Main.java:12) 

以下的代碼?

import java.util.Set; 
import java.util.HashMap; 


public class Main 
{ 
     public static void main(String args[]) 
     { 
       HashMap<Integer, Double> h = new HashMap<Integer,Double>(); 
       h.put(1, 2.2); 

       Integer[] keys = (Integer[])h.keySet().toArray(); 
     } 
} 

不應該有可能將Object []返回到Integer [],因爲鍵集包含整數?什麼是將密鑰集複製到整數數組的快速替代方法?

+0

數組類型不能直接像這樣轉換。 – Polynomial

回答

4

使用

Integer[] keys = h.keySet().toArray(new Integer[h.keySet().size()]); 

傳球同樣大小的數組給定的數組存儲鍵集的所有值。如果給定數組的大小與鍵集的大小不同,Java將不得不創建一個全新的數組來適應鍵集的大小。傳遞的第一個數組永遠不會被使用,它只會佔用內存,直到垃圾收集器再次分配它。

1

不,你不能像這樣直接施放。

如果您需要Integer[],請嘗試h.keySet().toArray(new Integer[0])

Set#toArray(T[])

或者,你可以創建自己的正確尺寸的Integer[],通過迭代返回toArray()在陣列上,並手動施放的每個元素。

+0

@downvoter爲什麼? – Jeffrey

2

提供正確類型的數組到指定者方法:作爲專用話機確實是最好的方式,因爲Java將使用

Integer[] keys = h.keySet().toArray(new Integer[0]); 
相關問題