2017-08-02 68 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 - 您将使用的两种方法。