Java for循环提高了性能

时间:2016-01-22 12:35:17

标签: java performance for-loop

我有HashSet for这样的结构:

loop

for(T element1 : list1) { for(T element2 : element1.getSubElements()) { ... } } 包含大约10.000个元素,list1每个迭代也包含大约10-20个元素。

循环大约需要2分钟才能完成。

关于如何改进这个的任何想法?

2 个答案:

答案 0 :(得分:3)

循环并不需要那么长时间。你在循环中所做的工作需要时间。

您的选择是;

  • 使用分析器优化循环内的工作。
  • 使用parallelStream()查看是否跨多个线程完成工作可以缩短所需的时间。
  

我有一个if,如果条件为真,我将element2添加到ArrayList。也许问题出在if?

要使用parallelStream,您可以执行

List<T> list2 = list1.parallelStream()
                     .flatMap(e -> e.getSubElements().stream())
                     .filter(e -> e.isConditionTrue())
                     .collect(Collectors.toList());

答案 1 :(得分:2)

尝试Lambda expression

list1.forEach(new T<E>() {
    public void accept(E value) {
        System.out.println(value);
    }
});

实际上,在Java 8中添加了forEach方法和Consumer接口,但是您已经可以使用像guava或lambdaj这样的库在Java 5+中执行非常类似的操作。但是,Java 8 lambda表达式允许以更简洁,更易读的方式实现相同的结果:

list1.forEach((E value) -> System.out.println(value));