有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

这是我第一次问这个问题

我想用10个从0到9的唯一整数制作ArrayList。 我要做下一步:

  1. 创建空的Arraylist
  2. 添加第一个随机数,这样我以后可以检查重复
  3. 接下来我创建新的随机int值,检查ArrayList中是否已经有这个值。如果我有-我尝试另一个数字,如果我没有-我加上这个数字
  4. 如果我有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)


共 (2) 个答案

  1. # 1 楼答案

    在用数字初始化ArrayList之后使用^{}

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

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

  2. # 2 楼答案

    使用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());