在C / C ++中,我们realloc
可以有效地为现有集合分配额外的空间。我猜想它的复杂度是次线性的(甚至是常数)。
有没有办法在Java中实现相同的目的?这是我看过的东西,
System.arrayCopy
以及Arrays.copyOf
ArrayList
必须与上面的第2点相同。注意:我的要求是将可能更大的阵列扩展到更大。
realloc
实际上,它很可能是O(n),因为它有时/经常涉及内存复制。从这个意义上讲,它在理论上的复杂性等同于在Java中分配新的数组。
现在,Java总是将新分配的内存归零,这可能会使它花费更长的时间,但是GC的OTOH具有疯狂的快速内存分配,因此它甚至可能比realloc
某些情况下更快。我希望有一种策略涉及到在Java中分配新数组的速度总体上可与媲美realloc
。可能Java适用于较小的数组,C / C ++可能适用于较大的数组,但是YMMV。您必须确定自己的特定实施和工作量是否达到基准。
因此总体而言:
ArrayList
内部执行的操作。最后但很重要的一点:除非您正在编写非常低级的代码,否则您可能不应该为此担心。只需使用一个已经存在的高级集合类(Java集合,Google集合,Trove等),然后让它们为您处理所有这些事情即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句