2016-09-13 39 views
2

许多List实现都有一个选项来指定集合的​​初始容量,为什么不允许CopyOnWriteArrayListCopyOnWriteArrayList的初始容量

+0

为什么你认为你需要一个? –

+0

我知道这些操作很昂贵,因为它每次都会提供一个全新的副本,但是之前没有仔细查看构造函数。这[回答](http://stackoverflow.com/a/39453595/2063026)让我觉得这是不可能的。 'CopyOnWriteArrayList'是一个非常糟糕的选择,用于并行流操作的大集合 – vsnyc

回答

7

在传统的ArrayList中,容量是在备份数组中预留更多空间的提示,以便稍后将更多元素添加到列表中。

CopyOnWriteArrayList中,每个(原子)写操作都会创建一个新的后备数组。预先分配大于当前列表大小的数组是没有意义的,因为该空间永远不会被使用。

+0

谢谢,这通常是有道理的。我希望通过在处理大型馆藏时分配更大的容量来实现一些性能提升。显然,这将是一个错误的数据结构选择(用于频繁写入) – vsnyc

+0

*显然,这将是一个错误的数据结构选择(用于频繁写入)* - 绝对正确! –