【问题标题】:Value insertion into list using JAVA 8使用 JAVA 8 将值插入列表
【发布时间】:2020-04-05 07:00:02
【问题描述】:
public static void main(String[] args) {

    List<Long> list = new ArrayList<>();

    for (long i = 1; i < 100000000; i++) {
        list.add(i);
    }



}

这个循环需要很长时间才能将值插入列表中,JAVA 8 中是否有任何功能,使用相同的任务将在最短的时间内执行。

【问题讨论】:

  • 更大的问题是你想用 (100000000 -1) 个元素的List 做什么?使用LongStream.iterate 对它们进行迭代也是可行的。
  • 这确实是一个很大的数字,尝试多线程并将循环拆分为两个或更多线程:) 但它不会按顺序进行
  • 这可以通过使用long[] list = new long[100000000];、在循环中将i声明为intlist[i] = i;来显着改善(除非你需要一个列表,这不太可能)
  • @DickensAS 是的,我使用连接进行多线程处理。但希望使用 Java 8 做同样的事情。感谢您的评论

标签: java java-8


【解决方案1】:

如果列表不是强制性的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 子类化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多