2017-08-02 97 views
-4

我有一個數組列表(數組大小5),每個數組包含從1到17的整數,其中每個整數在每個數組中只出現一次。例如,我列表中的第一個數組是(1,4,2,15,13),我列表中的第二個數組是(2,5,9,13,7),依此類推。Java - 有效生成隨機整數

我要生成一個隨機數組,這個數組不應該等於一個在我的名單。更確切地說,我不想擁有一個數組(2,5,9,13,7),因爲它已經在我的列表中(列表中的第二個,見上面)。有沒有解決這個問題的有效方法?非常感謝。

+1

你有什麼到目前爲止已經試過? – Andreas

+2

這聽起來像是'set'的集合。假設'[1,2,3,4,5] = [5,4,3,2,1]'。 java中的'set's保證每個放置在它們中的元素只出現一次。 – lilott8

+0

該假設是正確的([1,2,3,4,5] = [5,4,3,2,1])。所以,如果我找到了你,我必須將每個數組打包到一個集合中,然後我將創建一個新數組並將其與我的一組數據進行比較 - 是嗎? – Ferit

回答

1

從我的意見:轉換陣列set S和添加這些到另一個set。即:

Set<Set<Integer>> storage = new HashSet<>(); 

public void doSomething() { 
    // loop or do something interesting. 
    storage.add(getNextGeneratedSet()); 
} 

public Set<Integer> getNextGeneratedSet() { 
    Set<Integer> result = new HashSet<>(); 
    for(int i : getNextRandomInt()) { 
     result.add(i); 
    } 
    return result; 
} 

set S中的良好特性的兩個是順序並不重要和獨特性呢。在這種情況下,這對你非常有幫助;他們有效地做到了。 Java的hashset實現是O(1)addcontains - 您將使用的兩種方法。