尝试使用LinkedHashSet<Integer>
(参见文档)。
常规HashSet<Integer>
存储一组Integer
s 有效:放置一个新数字并检查一个数字是否已经存在是在恒定时间内完成的(当将数字存储在数组中时,正如您所提到的,这些查找需要线性时间来检查)。
现在,既然你说你想要一个数字列表,我们使用 aLinkedHashSet<Integer>
它具有常规的所有属性HashSet<Integer>
,并且还保证如果你循环遍历元素,你将始终以相同的顺序遍历它们。
代码看起来像这样:
Set<Integer> randomNumberList = new LinkedHashSet<Integer>();
int r;
// Make sure the number is not present in the list, and then add it:
do {
r = ... // Generate your next random number
} while( randomNumberList.contains(r) );
// At this point, we know r is not in the list, so add it:
randomNumberList.add(r);
// Do the previous as many times as you want.
// Now, to iterate over the list:
for(Integer number : randomNumberList) {
// Do something...
}
请注意,如果您想确保确实将数字添加到列表中,则do
-循环是必需的。while