8

我得到一个List对象A,然后我Apache Commons Collection4用来将获得的对象List从具有A实例转换为具有B实例。

    listOfBs = (List<B>) CollectionUtils.collect(listOfAs, componentTransformer);

但是,最终我需要一个Arrayof Bs而不是一个List.

所以我的问题是,哪个更快。

  1. 使用转换列表CollectionUtils.collect
  2. 使用创建数组listOfBs.toArray(new B[listOfBs.size()])

或者

  1. 循环listOfAs
  2. 将每个A对象转换为B对象
  3. 将每个B对象添加到数组 ( B[] )

第一种方法和第二种方法的区别在于第一种方法的代码少得多,但我不确定toArray方法是否存在隐藏循环或昂贵的操作。

我在第二种方法中看到的是,我确信我只会在listOfAs列表中循环一次。

那么哪种方法更快

4

2 回答 2

5

不要担心List.toArray()的性能,它的复杂性是线性的,因为它会在内部使用单个循环。

由于它是使用Arrays.copyOf实现的,最终到达System.arraycopy,它是在本机代码中实现的,它可能比 java 级别的循环更快。

于 2014-04-07T13:07:25.717 回答
3

这篇文章非常有趣: http: //shipilev.net/blog/2016/arrays-wisdom-ancients/#_conclusion

它详细介绍了将 List 转换为数组的不同方法。

结论:不要listOfBs.toArray(new B[listOfBs.size()])按照你的说法使用,而是使用listOfBs.toArray(new B[0]).

信不信由你,这更快。

于 2016-02-19T11:33:47.170 回答