在O(1)中支持toArray()的Java Collection?

时间:2017-02-20 08:06:10

标签: java data-structures

我查看了一些Collections实现,并注意到没有Collection在O(1)中返回其底层数组(如ArrayList),我是对的吗?

我需要一个可以在O(1)中返回toArray()的数据结构。这是为了只读目的,是否有类似的东西?

1 个答案:

答案 0 :(得分:2)

方法的Javadoc指定:

  

返回的数组将是"安全"因为这个集合没有保留对它的引用。 (换句话说,即使此集合由数组支持,此方法也必须分配新数组)。因此调用者可以自由修改返回的数组。 [link]

所以没有符合要求的实现会做你想要的(我不知道任何不符合这个要求的实现)。

请注意,除非集合具有固定大小(例如java.util.Arrays.asList返回的集合),否则它不太可能具有完全正确大小的后备数组。 (例如,ArrayList通常会有一个比所需要的更大的后备阵列,以便有足够的空间来便宜地增长。)