2017-07-10 49 views
1

我想创建测验,我在MainActivity中的ArrayList中有20个项目。每次我点击打开DetailActivity,传递随机项目时,如何从ArrayList中选择6个随机项目?随机化ArrayList中的项目子集

P.S我知道如何在活动之间导航并通过Intents传递数据,我只想知道如何从ArrayList中获取6个随机项目。

回答

3

您可以洗牌ArrayList使用Collections.shuffle

long seed = System.nanoTime(); 
Collections.shuffle(myArray, new Random(seed)); 

为了获得6项,你可以使用myArray.subList(0, 6)

+1

或'myArray.subList(0,6)' – shmosel

1
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和随机

3

使用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次,您可以有多次相同的元素。

+2

这种方法可以重复,它不会选择6个独特的元素。 – user2309843

+0

@ user2309843它是正确的。我正在编辑解释。 – davidxxx

0

0list.size()使用之间产生数:

int index = ThreadLocalRandom.current().nextInt(list.size()); 

有随机指标可以从列表中获取元素:

list.get(index);