Collection.toArray()的时间复杂度是多少?

时间:2014-12-06 03:24:11

标签: java arrays performance collections time-complexity

方法Collection.toArray()的时间复杂度是多少?它是O(n),如果是,它比循环提供的好处和单独将列表中的值分配给一个数组(当然还有漂亮的外观和一些额外的努力)。

2 个答案:

答案 0 :(得分:3)

因为toArray()方法是抽象的,所以谈论它的时间复杂度一般是没有意义的。

但是,对于本机实现,复杂性确实是O(n)。值得注意的是CollectionIterable的子接口。实现一个无法有效迭代的Iterable会非常荒谬。

toArray()的实施保持开放,为优化留出空间。使用简单的迭代(数组复制,在多个线程中运行......)可能比构建数组更快。但是,AbstractCollection中的default implementaion使用您在问题中提到的确切方法。

答案 1 :(得分:1)

在任何集合上调用toArray()都会遍历整个集合。对于来自java.util的所有集合,这意味着O(n)时间。当然,也可以构造比O(n)慢的实现,但是O(n)为时序提供了下限,因为你必须遍历整个集合。

当您需要调用专门请求数组的API时,或者出于任何原因想要复制集合的情况时,可以调用toArray()。通常,您不希望过度使用toArray(),因为它会分配足够的内存以适合您集合的所有元素。