List.toArray(Object [])性能

时间:2014-04-07 12:57:43

标签: java performance toarray

我获得List对象 A ,然后我使用Apache Commons Collection4将获得的List转换为 A < / strong>拥有 B 实例的实例。

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

但是,最终我需要{{1>} Bs 而不是Array

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

  1. 使用List
  2. 转换列表
  3. 使用CollectionUtils.collect
  4. 创建数组

    或者

    1. 循环listOfBs.toArray(new B[listOfBs.size()])
    2. 将每个 A 对象转换为 B 对象
    3. 将每个 B 对象添加到数组( B []
    4. 第一种方法与第二种方法的区别在于第一种方法的代码少得多,但我不确定 toArray 方法是否隐藏了隐藏循环或昂贵的操作。

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

      哪种方法更快

2 个答案:

答案 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])

信不信由你,这更快。