从ArrayList获取随机数?

时间:2013-10-13 15:38:57

标签: java math random arraylist

ArrayList<Integer>  lista = new ArrayList<Integer>();
lista.add(159);
lista.add(170);
lista.add(256);

例如,我在我的arraylist中得到了这3个数字,我想随机获得其中一个。 怎么可能?

5 个答案:

答案 0 :(得分:16)

使用Random类的一种方法:

ArrayList<Integer>  lista = new ArrayList<Integer>();
lista.add(159);
lista.add(170);
lista.add(256);

Random r = new Random();
System.out.println(lista.get(r.nextInt(lista.size())));

或者使用shuffle:

ArrayList<Integer>  lista = new ArrayList<Integer>();
lista.add(159);
lista.add(170);
lista.add(256);

Collections.shuffle(lista);
System.out.println(lista.get(0));

答案 1 :(得分:8)

您可以使用Random生成int作为随机索引。

Random rand = new Random();
Integer randomInt = lista.get(rand.nextInt(lista.size()));

此处,rand.nextInt(lista.size())会在0size - 1之间生成随机索引。

参考
Random#nextInt(int)

  

返回一个伪随机,均匀分布的int值介于0(包含)和指定值( exclusive )之间,从该随机数生成器的序列中提取。

答案 2 :(得分:1)

我们的想法是生成一个新的随机索引并使用该随机索引从数组中获取一个radom数。

为此

  1. 使用Math.random()生成一个随机数,返回带有正号的double值,大于或等于0.0且小于1.0。
  2. 调整随机值,使其落在列表的起始索引和结束索引之间。我们通过将double值乘以列表的大小并将其转换为整数来完成此操作,因为列表索引是整数。
  3. 这给了我们以下代码。

    int randomIndex = (int)(Math.random() * lista.size());
    
    System.out.println(lista.get(randomIndex));
    

    请注意,此处生成的随机数不是真正随机的,而是使用伪随机生成器生成的,这足以满足大多数日常使用。

    如果您感到好奇,可以在这里阅读更多关于PRNG的内容:)

答案 3 :(得分:0)

对列表中的元素数量使用随机数,并将其用作索引。

答案 4 :(得分:-1)

这样做:

Random rn = new Random();
int i = rn.nextInt() % lista.size();
System.out.println(lista.get(i));