我对数组有一些疑问,我正在读一本有关Java的书,现在我在阅读有关StringBuilder类的知识,我被告知该类将当前字符串以当前容量保存在数组中,以防容量不足,此类会自动增加容量capacity = 2*(capacity + 1),当我学习c和c ++时,如果数组中没有足够的空间,我被教导做同样的事情,但是what is the logic behind this statement?为什么我不能找出如何我需要大量内存,然后再执行capacity = capacity + homMuchDoINeed(),或者为什么不执行capacity = 4 * capacity,请先感谢您的回答

最佳答案

为什么我不能找出我需要多少内存然后再做
  
  capacity = capacity + homMuchDoINeed()


因为那时您需要为每个插入分配新的内存,所以单个插入需要线性时间,而n个插入则需要二次时间。另一方面,如果您以x2或x1.5之类的常数因子增长,则单次插入将摊销恒定时间,而n次插入将花费线性时间。

Stephan T. Lavavej在多个视频中对此进行了说明,例如this one

关于java - 追加现有数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4291166/

10-12 20:33