0

这里有一个简单的问题——主要是关于 API。

我想以随机顺序遍历数组。

这很容易:

  1. 用数字 0 到 N 填充列表
  2. 使用 Collections.shuffle 打乱列表
  3. 使用这个打乱列表来指导我的数组迭代。

但是,我想知道步骤 1(生成从 0 到 N 的数字列表)是否存在于预先编写的代码中。

例如,它可能是番石榴的 XYZ 类中的一种方便方法吗?

4

5 回答 5

2

番石榴中最接近的东西是

ContiguousSet.create(Range.closedOpen(0, n), DiscreteDomains.integers())

...但是,坦率地说,自己编写for循环可能更具可读性。

于 2013-08-15T16:07:05.030 回答
1

您可能想查看Apache Commons在许多其他有用的函数中,在类中实现nextPermutation方法RandomDataGenerator

这显然比填充Listor的方法要大得多array,但是 commons 是非常强大的库,它为数学计算提供了更多好的方法。

于 2013-08-15T16:09:16.933 回答
1

特别注意到您对“快速”的强调,我无法想象会有比

List<Integer> = new ArrayList<Integer>(range);

然后迭代并填充每个条目。请注意,我设置容量是为了避免在封面下调整列表大小。

于 2013-08-15T16:02:35.977 回答
0

Java 不允许您自动填充您的值。有关在 java 中填充数组的方法,请参阅此问题

创建一个不循环的数字数组?

于 2013-08-15T16:02:14.227 回答
-1

如果您跳过第 1 步并立即进行改组,我认为您将获得最快的解决方案。

int range = 1000;
List<Integer> arr = new ArrayList<Integer>(range);
for(int i=0;i<range;i++) {
    arr.add((int)(Math.random()*i), new Integer(i));
}
于 2013-08-15T16:08:27.567 回答