是否有一个集合addAll实用程序方法,可以确保集合的基础数据结构最多只调整一次大小?

das*_*asl 2 java collections

java.util.Collections中addAll方法的实现只是循环遍历源集合,并为源集合中的每个元素调用接收集合的add方法.

因此,如果接收集合的容量小的接收集合的基础数据结构的调整可能发生多次,并且我们加入许多元素到它.每个调整大小都是O(n)操作.

似乎应该存在一个好的集合addAll方法,它将检查我们将添加的元素的数量,并在开始时设置接收集合的容量(如果需要).这样的实用方法是否存在?如果没有,为什么不呢?

澄清:我意识到存在具有此期望行为的特定于实现的addAll方法(如在ArrayList中).我想知道是否有Collection实用程序类将以一种适用于所有Collection实现类的方式获取此行为.

Tom*_*icz 8

关于您特别谈论哪个系列?我看到例如ArrayList以下内容:

public boolean addAll(Collection<? extends E> c) {
    Object[] a = c.toArray();
    int numNew = a.length;
    ensureCapacity(size + numNew);
    System.arraycopy(a, 0, elementData, size, numNew);
    //...
}
Run Code Online (Sandbox Code Playgroud)

这似乎是你想要的行为.