这是我第一次问这个问题。
我想用10个唯一的int数字从0到9制作ArrayList。 我接下来的步骤:
我的代码:
public static void main(String[] args) {
Random rd = new Random();
ArrayList<Integer> list = new ArrayList<Integer>();
int q = rd.nextInt(10);
list.add(q);
while (true) {
int a = rd.nextInt(10);
for (int b=0;b<list.size();b++){
if (a == list.get(b)) break;
else list.add(a);
}
if (list.size() == 10) break;
}
System.out.println(list);
}
但我在控制台看到的只是无休止的过程。
问题是 - 是否有另一种方法可以使ArrayList具有10个唯一数字(0到9)?
答案 0 :(得分:11)
使用数字初始化ArrayList
后使用Collections.shuffle
。
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < 10; i++)
{
list.add(i);
}
Collections.shuffle(list);
这将以线性时间运行,因为ArrayList
为RandomAccess
。
答案 1 :(得分:1)
使用Java 8 Streams
List<Integer> shuffled =
// give me all the numbers from 0 to N
IntStream.range(0, N).boxed()
// arrange then by a random key
.groupBy(i -> Math.random(), toList())
// turns all the values into a single list
.values().flatMap(List::stream).collect(toList());