我有:非常大的数组:{o1, o2, o3, ..., o100000}。在某些情况下,元素序列具有相同的字段值。我是说 o1.getField()
等于 o2.getField()
等于 o3.getField()
.假设 o1、o2 和 o3 相似。
我想要:对每个相似元素子数组(例如 {o1, o2, o3}
、{o4, o5}
、...)进行一些后处理。
重要:由于数组非常大,缓存(意味着将数组移动到另一个集合或复制其中的一部分)是 Not Acceptable !
问题这样做最优雅的方法是什么?
P.S. 我不需要划分整个数组,只需创建一个 postAction。我可以得到第一个{o1, o2, o3}
,制作 postAction,而不是获得第二个,依此类推...
我将从挑战“无法复制数组”的前提开始。如果使用 System.arrayCopy()
,数组复制会非常快!
这是我编写的一个小示例程序,它创建、填充和复制一个包含 100,000,000 个元素的数组。
public static void main(final String[] args) {
final Stopwatch stopwatch = new Stopwatch().start();
final String[] arr = new String[100_000_000];
Arrays.fill(arr, "foo");
final String[] arr2 = new String[arr.length];
System.arraycopy(arr, 0, arr2, 0, arr.length);
stopwatch.stop();
System.out.println(stopwatch.elapsed(MILLISECONDS));
}
在我的普通机器上,这需要 683 毫秒。
- 考虑到代码可能会在比我的机器快得多的机器上运行,这是 Not Acceptable 吗?
- 或者您的数组是否明显大于 100000000 个元素?
如果这些都不是肯定的,我会选择一些复制解决方案。