2013-06-19 188 views
1

我想從linkedhashset中檢索隨機元素。下面是我的代碼,但每次都會給我例外。java.lang.ClassCastException:[Ljava.lang.Object;與[Ljava.lang.String;不兼容

private static void generateRandomUserId(Set<String> userIdsSet) { 

    Random rand = new Random(System.currentTimeMillis()); 
    String[] setArray = (String[]) userIdsSet.toArray(); 
    for (int i = 0; i < 10; ++i) { 
     System.out.println(setArray[rand.nextInt(userIdsSet.size())]); 
    } 
} 

下面是個例外,我getting-

java.lang.ClassCastException: [Ljava.lang.Object; incompatible with [Ljava.lang.String;

誰能幫我這個?有沒有更好的方法來做到這一點?

+0

你應該使用'userIdsSet.toArray(new String [])'轉換你的數組來生成一個String數組。否則,您正在使用的方法將生成一個Object數組。 –

回答

11

試試這個:

String[] setArray = userIdsSet.toArray(new String[userIdsSet.size()]); 

toArray method that takes no arguments返回一個Object[]不能轉換爲String[]other version返回一個類型數組。

+0

也許可以解釋爲什麼? –

+0

@assylias好點!在你提供的鏈接中,他們使用了新的String [0] ...我測試了它,它的工作原理和你的示例 – Paolof76

+1

@ Paolof76使用'new String [0]'分配了一個不必要的對象,所以我更喜歡我的答案中的版本可能的(儘管在大多數情況下差異很小)。 – assylias

相關問題