方法Collection.toArray()
的时间复杂度是多少?它是O(n),如果是,它比循环提供的好处和单独将列表中的值分配给一个数组(当然还有漂亮的外观和一些额外的努力)。
答案 0 :(得分:3)
因为toArray()
方法是抽象的,所以谈论它的时间复杂度一般是没有意义的。
但是,对于本机实现,复杂性确实是O(n)
。值得注意的是Collection
是Iterable
的子接口。实现一个无法有效迭代的Iterable
会非常荒谬。
toArray()
的实施保持开放,为优化留出空间。使用简单的迭代(数组复制,在多个线程中运行......)可能比构建数组更快。但是,AbstractCollection
中的default implementaion使用您在问题中提到的确切方法。
答案 1 :(得分:1)
在任何集合上调用toArray()
都会遍历整个集合。对于来自java.util
的所有集合,这意味着O(n)时间。当然,也可以构造比O(n)慢的实现,但是O(n)为时序提供了下限,因为你必须遍历整个集合。
当您需要调用专门请求数组的API时,或者出于任何原因想要复制集合的情况时,可以调用toArray()
。通常,您不希望过度使用toArray()
,因为它会分配足够的内存以适合您集合的所有元素。