2014-02-25 73 views
1

欲填充隨機5個元素的數組列表從0至4填充的5個隨機整數

比方說我的ArrayList無規=新的ArrayList()的列表更簡單的方法

我有什麼是以下...

for (int itter = 0; itter < 5; itter++) { 
         do { 
           random = randInt(0, 4); 
         } while (randomizer.contains(random)); 
         if (randomizer.contains(random)) { 
         } else { 
           randomizer.add(random); 
         } 

有5個整數隨機添加到一個ArrayList更快的方法?謝謝!

+2

嘗試[Collections.shuffle](http://docs.oracle.com/javase/6/docs/api /java/util/Collections.html#shuffle%28java.util.List%29) –

+0

'Collections.shuffle'不夠快嗎?我可以想到至少有一種方法會更快 - 但我無法想象優化會值得複雜。 –

+0

@tobias_K感謝文檔。大衛華萊士,我想我應該把我的標題改爲更簡單的方式/更少的冗長。多謝你們。 – user2908101

回答

5

嘗試Collections.shuffle

List<Integer> randomizer = Arrays.asList(0, 1, 2, 3, 4); 
Collections.shuffle(randomizer); 
System.out.println(randomizer); 

輸出示例:

[3, 4, 2, 0, 1] 

附錄:只是爲了保持完整性,手頭的問題,使用Arrays.asList是nic e和簡潔,但在一般情況下,使用for循環填充初始列表更好,更靈活。

+0

謝謝tobias_k。我在等待接受答案。 – user2908101

+1

+1你可以通過提供一個重複使用的「隨機」來讓這個稍微快一點。 –

+0

親愛的匿名downvoter,請幫助我改善我的答案,告訴我爲什麼你downvoted。 –

0

你可以簡單地洗牌陣列

import java.util.Collections; 
import java.util.Arrays; 
import java.util.List 

public class Test { 

    public static void main(String args[]){ 
     List X = Arrays.asList(0, 1, 2, 3, 4); 
     Collections.shuffle(X); 
    } 

} 
+0

問題標籤爲Java。 –

+0

@David謝謝指點,我們的,更正了 – lejlot

1

要得到這種隨機集合,那麼最好的方法是使用Collections.shuffle。用可能的值填充陣列,然後洗牌並完成。 (你也可以做同樣的事情,例如從0,100中選擇10個數字,用100個數字填充一個數組,然後使用第一個10來填充數組)。

3
 LinkedList<Integer> list = new LinkedList<Integer>(); 
     for(int i=0; i<5; i++) { 
      list.add(i); 
     } 
     Collections.shuffle(list); 
+1

這是我最喜歡的,因爲它可擴展到成千上萬的整數列表,你不能簡單地輸入'1,2,3,4,5,... 1232'。 – Rainbolt

0

通過首先創建一個「選擇」列表(0,1,2,3,4),可以使事情更快。然後經過一個循環4次(對於(int i = 0; i < 4; i ++){with int choice = randInt(0,4-i));將該選擇添加到該位置,從選擇列表中刪除該位置並繼續)。 完成循環後,將最後剩下的選區放入結果中。

不要直接試着產生一個整數,如果該整數已經選擇重試,