Java 向整数数组中添加唯一的随机数

Java 向整数数组中添加唯一的随机数,java,arrays,arraylist,Java,Arrays,Arraylist,我已经为整数创建了一个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

我已经为整数创建了一个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));      

}
Random rand=new Random();
ArrayList值=新的ArrayList();
int START_金额=200;
对于(int i=0;i<起始金额;
添加(rand.nextInt(1024));
}

正如您可能看到的,for循环将向“值”中添加200个随机数ArrayList,从0到1023。现在我的问题是,我希望数组只有唯一的数字。我如何告诉Random类不要生成ArrayList中已经存在的任何数字?

我要做的是创建一个由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);
List ints=new ArrayList();

对于(int i=1;i,您还可以在每次添加随机数时检查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--;
  }

}
Random rand=new Random();
整数r;
ArrayList值=新的ArrayList();
int START_金额=200;
对于(int i=0;i
虽然我认为卡布朗拉克的答案会更有效,如果这很重要的话

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.
因此,我要做的是使用集合,然后将它们添加到列表中:

List<Integer> values = new ArrayList<Integer>();
Set<Integer> set = new HashSet<Integer>();
while(set.size() < 200) 
{
    set.add(rand.nextInt(1024)); 
}
values.addAll(set);
List values=new ArrayList();
Set=newhashset();
while(set.size()<200)
{
set.add(rand.nextInt(1024));
}
addAll(集合);
使用一套:

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);
Random rand=new Random();
Set values=新的HashSet();
最终整数起始值=200;
而(values.size()
可能的重复项您不告诉
Random
类做任何事情-这将使其成为非随机的。在第一个循环后丢失所有内容,并使用List.subList()代替:
ints=ints.subList(0,开始\u);
我不想犯错误,因为我记不太清楚列表操作。所以这很有效,他有这个想法,但子列表看起来很不错。非常好的想法,我记得做得和这个类似,谢谢!我比这个快了7秒,嘿嘿。使用集合或其他列表有什么区别?当你尝试添加元素时使用
Set
中已经包含的
add()
,将
add()
方法放入
Set
中,则
add()
方法将返回false,并且不会添加重复元素。请参见上面的Zhuinden答案。集合不能包含重复项。我同意,您应该使用集合来避免重复。
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);