我需要挑选一些从随机值ArrayList
,但是值不能重复。 随着代码下面我简单收拾随机值,但他们可以复制。
for (int i = 0; i < 5; i++) {
index = random.nextInt(menuItems.size());
HashMap<String, String> urls = new HashMap<String, String>();
urls.put("Value", menuItems.get(index).get(KEY_URL));
randomitems.add(urls);
}
如果您不需要保留menutItems
按照特定的顺序,你可以简单地将它洗和采取的第一个5个项目:
Collections.shuffle(menuItems);
for (int i = 0; i < 5; i++) {
HashMap<String, String> urls = new HashMap<String, String>();
urls.put("Value", menuItems.get(i).get(KEY_URL));
randomitems.add(urls);
}
如果确实需要保留menuItems
,因为它是你可以先制作一个拷贝。
是的,这是随机性的性质,同样的数量可能会再次给出。
为了摆脱,你必须手动检查与先前收到的人在新的随机数,并抛出所有你不想要的。
复制你的列表,所以你不要弄乱你的旧列表
List<Object> randomList = new ArrayList<Object>(oldList);
选一个
int index = new Random().nextInt(randomList.size());
Object randomObj = randomList.get(index);
randomList.remove(index);
所以每次选择一个时间,你不能再挑选一个。
我在这里回答你的问题的称号。 我用一个Set
,以确保每个数字都是独特的,我不停止添加数字,直到它等于我想要的大小。 然后我把它转换成一个List
:
package com.sandbox;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
public class Sandbox {
private static final int TOTAL_NUMBERS_I_WANT = 5;
public static void main(String[] args) {
Random random = new Random();
Set<Integer> nonRepeatingRandomNumbers = new HashSet<Integer>();
while (nonRepeatingRandomNumbers.size() < TOTAL_NUMBERS_I_WANT) {
nonRepeatingRandomNumbers.add(random.nextInt());
}
List<Integer> result = new ArrayList<Integer>(nonRepeatingRandomNumbers);
System.out.println(result);
}
}