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

hs1ihplo  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(523)

这是我第一次问这个问题。
我想用10个从0到9的唯一整数做一个数组列表。我做下一步:
创建空arraylist
加上第一个随机数,这样我以后就可以检查是否有重复
接下来我创建新的随机int值,检查arraylist中是否已经有了这个值。如果我有-我试另一个号码,如果我没有-我加上这个号码。
如果我有10个数字,我就停止循环
我的代码:

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)?

50pmv0ei

50pmv0ei1#

使用Java8流

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());
0vvn1miw

0vvn1miw2#

使用 Collections.shuffle 在初始化 ArrayList 带着数字。

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

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

相关问题