如何在Java中从ArrayList中随机选择一个元素?

4

如何从数组列表中随机选择一个项目,例如:

ArrayList<Integer>  mylist= new ArrayList<Integer>();
mylist.add(19);
mylist.add(154);
mylist.add(112);
mylist.add(15);
mylist.add(112);

目前,我正在这样做,但由于需要反复使用,是否有更简短的方法来完成这个操作?

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

1
System.currentTimeMillis()%lista.size() - gifpif
2个回答

13
您可以创建一个方法来从任何列表中随机选取一个项,如下所示:
static Random rand = new Random();
static <T> T getRandomItem(List<T> list) {
    return list.get(rand.nextInt(list.size()));
}

每次需要随机数时都创建一个新的Random对象是一种不好的做法。这只会创建一个对象并重复使用它。
此外,您可以使用任何类型的列表-不仅限于ArrayList<Integer>

3
这应该是被接受的答案。 - joshden

6

简单来说,把你的代码放入一个像这样的方法中

Random rand; // Global variable

public static int randomItem(Arraylist<Integer> mylist) {
    rand = new Random(); 
    Integer randomInt = lista.get(rand.nextInt(lista.size()));
    return randomInt;
}

在你的主方法中像这样调用它;
int selected = randomItem(mylist);
System.out.println(selected);

谢谢,这就是我想要的。 - Adam
2
你已经将 rand 设为实例变量,但你正在从一个 static 方法中设置它,这甚至不会编译。每次调用方法时创建一个新的 Random 是一个可怕的想法。 - David Conrad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接