List<Integer> list = new ArrayList<Integer>(); for (int i=start; i<=end; i++) { //把范围的数据保存到一个list中 list.add(i); } List<Integer> result = new ArrayList<Integer>(); for (int i=0; i<num_you_want; i++) { //从list中随机移走数据,保存到结果list中,移走的数据是不会再存在于list了,所以保证数据不重复 result.add(list.remove((int)(Math.random()*list.size()))); } System.out.println(result);
稍稍修改一下 List<Integer> list = new LinkedList<Integer>(); // 因为后续需要不停remove,LinkedList会更快点
也可以用Set类来存储数据,Set是不会重复的import java.util.*;public class Test { public static void main(String[] args) { HashSet<Integer> set = new HashSet<Integer>(); for (int i = 0; i < 10; i++) { int t = (int) (Math.random() * 100); set.add(t); }
for (int i=start; i<=end; i++) { //把范围的数据保存到一个list中
list.add(i);
}
List<Integer> result = new ArrayList<Integer>();
for (int i=0; i<num_you_want; i++) { //从list中随机移走数据,保存到结果list中,移走的数据是不会再存在于list了,所以保证数据不重复
result.add(list.remove((int)(Math.random()*list.size())));
}
System.out.println(result);
List<Integer> list = new LinkedList<Integer>(); // 因为后续需要不停remove,LinkedList会更快点
{
public static void main(String[] args)
{
HashSet<Integer> set = new HashSet<Integer>();
for (int i = 0; i < 10; i++)
{
int t = (int) (Math.random() * 100);
set.add(t);
}
Iterator iterator = set.iterator();
while (iterator.hasNext())
{
System.out.println(iterator.next());
}
}
}
可以先把该范围内的所有数字(如果不大的话)存在一个list里面,将该list进行洗牌,
然后每次从list里面取出一个数字即可
List<Integer> nums = new ArrayList<Integer>();
for(int i=0; i<10; i++) nums.add(i);
Collections.shuffle(nums);
for(int i=0; i<10; i++) {
Integer randNum = nums.get(i);
System.out.println(randNum);
}