java.util.Collection具有最低的开销?

时间:2011-02-15 14:48:05

标签: java collections overhead

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

这让我想知道:我可以使用什么绝对最低开销的Java Collection来快速组装此方法的参数?

3 个答案:

答案 0 :(得分:6)

这取决于它如何复制元素,但如果它创建了ArrayList - 这样的副本

new ArrayList<Something>(inputCollection);

或如果确实

someCopy.addAll(inputCollection);

然后它会经过inputCollection.toArray(),这可能是ArrayList最好实现的。

答案 1 :(得分:0)

这取决于您的源数据。

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

final Object[] source = ...

Collection colllection = new AbstractCollection(){
    public Object[] toArray(){ return source; }
    // other methods don't matter
}

答案 2 :(得分:0)

如果您在谈论内存占用,请查看this table中的memory-measurerArrays$ArrayList遗失,但可能是ArrayListArrays.asList(...))的替代方案。

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