我为整数创建了一个ArrayList,我想填充200个数字。每个数字可以在0到1023之间。
因此我写了这段代码:
Random rand = new Random();
ArrayList<Integer> values = new ArrayList<Integer>();
int START_AMOUNT = 200;
for(int i = 0; i < START_AMOUNT;
values.add(rand.nextInt(1024));
}
正如您可能看到的,for循环将向“values”ArrayList添加200个随机数,从0到1023.现在我的问题是我希望Array只有唯一的数字。如何告诉Random类不要生成ArrayList中已存在的任何数字?
答案 0 :(得分:4)
我要做的是创建一个由1,2,3,...,1023组成的1023 int数组。然后你将它洗牌,你只需要200个第一个术语:
List<Integer> ints = new ArrayList<Integer>();
for(int i = 1; i <= 1023; i++)
{
ints.add(i);
}
Collections.shuffle(ints);
按照@ Bohemian♦
的建议进行编辑List<Integer> result = ints.subList(0,200);
答案 1 :(得分:2)
A Set is a Collection that cannot contain duplicate elements.
It models the mathematical set abstraction.
The Set interface contains only methods inherited from Collection
and adds the restriction that duplicate elements are prohibited.
因此,
public boolean add(E e)
Adds the specified element to this set if it is not already present.
[...]
If this set already contains the element,
the call leaves the set unchanged and returns false.
因此,我要做的是使用Set,然后将其添加到列表中:
List<Integer> values = new ArrayList<Integer>();
Set<Integer> set = new HashSet<Integer>();
while(set.size() < 200)
{
set.add(rand.nextInt(1024));
}
values.addAll(set);
答案 2 :(得分:1)
使用套装:
Random rand = new Random();
Set<Integer> values = new HashSet<Integer>();
final int START_AMOUNT = 200;
while(values.size() < START_AMOUNT) {
values.add(rand.nextInt(1024));
}
List<Integer> uniqueList = new ArrayList<Integer>(values);
System.out.println(uniqueList);
答案 3 :(得分:0)
每次要添加一个随机数时,您还可以检查ArrayList是否包含给定的随机数。
Random rand = new Random();
Integer r;
ArrayList<Integer> values = new ArrayList<Integer>();
int START_AMOUNT = 200;
for(int i = 0; i < START_AMOUNT; i++) {
r = rand.nextInt(1024);
If !values.contains(r) {
values.add(r);
} else {
i--;
}
}
虽然我觉得Kabulan0lak的答案会更有效率,如果这很重要的话。