这里有一个简单的问题——主要是关于 API。
我想以随机顺序遍历数组。
这很容易:
- 用数字 0 到 N 填充列表
- 使用 Collections.shuffle 打乱列表
- 使用这个打乱列表来指导我的数组迭代。
但是,我想知道步骤 1(生成从 0 到 N 的数字列表)是否存在于预先编写的代码中。
例如,它可能是番石榴的 XYZ 类中的一种方便方法吗?
这里有一个简单的问题——主要是关于 API。
我想以随机顺序遍历数组。
这很容易:
但是,我想知道步骤 1(生成从 0 到 N 的数字列表)是否存在于预先编写的代码中。
例如,它可能是番石榴的 XYZ 类中的一种方便方法吗?
番石榴中最接近的东西是
ContiguousSet.create(Range.closedOpen(0, n), DiscreteDomains.integers())
...但是,坦率地说,自己编写for
循环可能更具可读性。
您可能想查看Apache Commons
在许多其他有用的函数中,在类中实现nextPermutation方法RandomDataGenerator
这显然比填充List
or的方法要大得多array
,但是 commons 是非常强大的库,它为数学计算提供了更多好的方法。
特别注意到您对“快速”的强调,我无法想象会有比
List<Integer> = new ArrayList<Integer>(range);
然后迭代并填充每个条目。请注意,我设置容量是为了避免在封面下调整列表大小。
Java 不允许您自动填充您的值。有关在 java 中填充数组的方法,请参阅此问题
如果您跳过第 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));
}