java - 使用 JAVA 8 将值插入列表
问题描述
public static void main(String[] args) {
List<Long> list = new ArrayList<>();
for (long i = 1; i < 100000000; i++) {
list.add(i);
}
}
这个循环需要很长时间才能将值插入到列表中,JAVA 8 中是否有任何功能,使用相同的任务将在最短的时间内执行。
解决方案
如果列表不是强制性的ArrayList
:
Long[] array = new Long[100_000_000];
Arrays.parallelSetAll(array, Long::valueOf);
List<Long> list = Arrays.asList(array);
我没有做过任何时间测量。从您可以设置值的意义上说,该列表是可修改的,但它具有固定大小,没有添加或删除。
如果您确实需要可变大小的列表,您可以尝试:
List<Long> list = new ArrayList(Arrays.asList(array));
但是,它在某种程度上违背了利用并行执行的想法,而且我不再确定与您已经获得的速度相比如何。
编辑:如果列表根本不需要修改,请制作自己的“列表”实现,它不存储任何实际数据并在每次请求元素时计算值。然后初始化将不需要时间。您可以AbstractList
为此目的进行子类化。