我对数组有一些疑问,我正在读一本有关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/