使用Java8将值插入到列表中

使用Java8将值插入到列表中,java,java-8,Java,Java 8,如果JAVA 8中有任何功能,那么使用相同的任务将在最短的时间内执行,那么这个循环将花费太长的时间将值插入列表 如果列表不是必须是ArrayList: 我没有做过任何时间测量。该列表可以修改,因为您可以设置值,但它的大小是固定的,不需要添加或删除 如果您确实需要可变大小的列表,您可以尝试: Long[] array = new Long[100_000_000]; Arrays.parallelSetAll(array, Long::valueOf); List<L

如果JAVA 8中有任何功能,那么使用相同的任务将在最短的时间内执行,那么这个循环将花费太长的时间将值插入列表

如果列表不是必须是ArrayList:

我没有做过任何时间测量。该列表可以修改,因为您可以设置值,但它的大小是固定的,不需要添加或删除

如果您确实需要可变大小的列表,您可以尝试:

    Long[] array = new Long[100_000_000];
    Arrays.parallelSetAll(array, Long::valueOf);
    List<Long> list = Arrays.asList(array);
不过,它有点违背了利用并行执行的想法,我也不再确定它的速度与您已有的速度相比会有多快


编辑:如果列表根本不需要修改,则创建自己的“列表”实现,该实现不存储任何实际数据,并在每次请求元素时计算值。然后初始化将不需要时间。为此,您可以将AbstractList子类化。

更大的问题是,您希望如何处理100000000-1元素的列表?使用LongStream.iterate也可以对它们进行迭代。这确实是一个很大的数字,请尝试多线程并将循环拆分为两个或多个线程:但这不符合顺序。请使用linkedlist。使用long[]list=new long[100000000]可以显著改善这一点;,在循环中将i声明为int,并且list[i]=i;除非你需要一份清单unlikely@DickensAS是的,我是用多线程连接的。但是希望使用Java8也能做到这一点。谢谢你的评论
    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));