在java中创建一个包含10个唯一数字的数组

时间:2015-01-14 22:20:38

标签: java arraylist

这是我第一次问这个问题。

我想用10个唯一的int数字从0到9制作ArrayList。 我接下来的步骤:

  1. 创建空Arraylist
  2. 添加第一个随机数,以便稍后检查重复
  3. 接下来我创建新的随机int值,检查我是否已经在ArrayList中使用了这个值。如果我有 - 我尝试另一个号码,如果我没有 - 我添加这个号码。
  4. 如果我有10个号码,我就会停止循环
  5. 我的代码:

    public static void main(String[] args) {
    
        Random rd = new Random();
        ArrayList<Integer> list = new ArrayList<Integer>();
    
        int q = rd.nextInt(10);
        list.add(q);
    
        while (true) {
            int a = rd.nextInt(10);
            for (int b=0;b<list.size();b++){
                if (a == list.get(b)) break;
                else list.add(a);
            }
            if (list.size() == 10) break;
        }
        System.out.println(list);
    }
    

    但我在控制台看到的只是无休止的过程。

    问题是 - 是否有另一种方法可以使ArrayList具有10个唯一数字(0到9)?

2 个答案:

答案 0 :(得分:11)

使用数字初始化ArrayList后使用Collections.shuffle

ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 10; i++)
{
    list.add(i);
}
Collections.shuffle(list);

这将以线性时间运行,因为ArrayListRandomAccess

答案 1 :(得分:1)

使用Java 8 Streams

List<Integer> shuffled = 
   // give me all the numbers from 0 to N
   IntStream.range(0, N).boxed()
        // arrange then by a random key
        .groupBy(i -> Math.random(), toList())
        // turns all the values into a single list
        .values().flatMap(List::stream).collect(toList());