9

我在另一个接受java.util.Collection对象的 API 中调用一个方法。我查看了该方法,它ArrayList在执行任务之前立即将集合中的所有内容复制到一个新的中。

这让我想知道:我可以用来为这个方法快速组装参数的绝对最低开销的 Java 集合是什么?

4

3 回答 3

6

这取决于它如何复制元素,但如果它ArrayList像这样创建 -copy

new ArrayList<Something>(inputCollection);

或者如果确实如此

someCopy.addAll(inputCollection);

然后它将通过inputCollection.toArray()可能最好由ArrayList.

于 2011-02-15T14:51:22.410 回答
1

如果您正在谈论内存占用,请查看memory-measurer中的此表。缺失,但可能是( ) 的一个很好的替代方案。Arrays$ArrayListArrayListArrays.asList(...)

更新:我将原始链接更新到 github 中项目的新位置。考虑到这些指标已经有好几年的历史了。

于 2011-02-15T18:32:28.520 回答
0

这取决于您的源数据。

如果您的源数据已经是一个数组,并且该数组不会被其他人使用,那么最快的方法是拥有一个瘦包装器:

final Object[] source = ...

Collection colllection = new AbstractCollection(){
    public Object[] toArray(){ return source; }
    // other methods don't matter
}
于 2011-02-15T17:50:16.380 回答