我获得List
对象 A ,然后我使用Apache Commons Collection4
将获得的List
转换为 A < / strong>拥有 B 实例的实例。
listOfBs = (List<B>) CollectionUtils.collect(listOfAs, componentTransformer);
但是,最终我需要{{1>} Bs 而不是Array
。
所以我的问题是,哪个更快。
List
CollectionUtils.collect
或者
listOfBs.toArray(new B[listOfBs.size()])
第一种方法与第二种方法的区别在于第一种方法的代码少得多,但我不确定 toArray 方法是否隐藏了隐藏循环或昂贵的操作。
我在第二种方法中看到的是,我确定我只会在listOfAs
列表上循环一次。
哪种方法更快?
答案 0 :(得分:4)
不要担心List.toArray()的性能,其复杂性是线性,因为它将在内部采用单个循环。
由于它是Arrays.copyOf实现的,最终来到System.arraycopy,它在本机代码中实现,它可能比java级循环更快。
答案 1 :(得分:3)
阅读非常有趣的是这篇文章:http://shipilev.net/blog/2016/arrays-wisdom-ancients/#_conclusion
详细介绍了将List转换为数组的不同方法。
结论:请勿使用您所说的listOfBs.toArray(new B[listOfBs.size()])
,但请使用listOfBs.toArray(new B[0])
。
信不信由你,这更快。