我想创建测验,我在MainActivity中的ArrayList中有20个项目。每次我点击打开DetailActivity,传递随机项目时,如何从ArrayList中选择6个随机项目?随机化ArrayList中的项目子集
P.S我知道如何在活动之间导航并通过Intents传递数据,我只想知道如何从ArrayList中获取6个随机项目。
我想创建测验,我在MainActivity中的ArrayList中有20个项目。每次我点击打开DetailActivity,传递随机项目时,如何从ArrayList中选择6个随机项目?随机化ArrayList中的项目子集
P.S我知道如何在活动之间导航并通过Intents传递数据,我只想知道如何从ArrayList中获取6个随机项目。
您可以洗牌ArrayList
使用Collections.shuffle
:
long seed = System.nanoTime();
Collections.shuffle(myArray, new Random(seed));
为了获得6项,你可以使用myArray.subList(0, 6)
。
ArrayList<Integer> list = new ArrayList<Integer>();
lista.add(1);
lista.add(2);
lista.add(1);
lista.add(3);
lista.add(4);
lista.add(5);
lista.add(6);
.
.
.
Collections.shuffle(list);
现在你可以得到指数0到5和随机
使用Random
对象:
Random random = new Random();
myList.get(random.nextInt(myList.size())));
或者你也可以Collections.shuffle(myList);
,根据引擎盖也采用了Random
但应该因为它在列表的所有元素上进行迭代,所以会有轻微的开销。
就你而言,由于你需要检索6个不同的元素,所以你应该使用Collections.shuffle(myList);
,因为它允许用myList.subList(0,6);
检索6个不同的元素。
通过与myList.get(random.nextInt(myList.size())));
重复6次,您可以有多次相同的元素。
这种方法可以重复,它不会选择6个独特的元素。 – user2309843
@ user2309843它是正确的。我正在编辑解释。 – davidxxx
要0
和list.size()
使用之间产生数:
int index = ThreadLocalRandom.current().nextInt(list.size());
有随机指标可以从列表中获取元素:
list.get(index);
或'myArray.subList(0,6)' – shmosel