为什么Java要以3/2而不是2的倍数来增长一个完整的数组?
“a的选择取决于库或应用程序:有些教科书使用a= 2,但Java的ArrayList实现使用a= 3/2,而Python列表数据结构的C实现使用a=9/8。”
源维基百科
发布于 2014-02-07 10:04:47
一般来说,增长因子的选择主要取决于经验和良好的猜测。您必须在不可缺少的内存使用(对于未使用的数组空间)和非必要的运行时使用(如果必须经常扩大数组)之间找到适当的平衡。你还必须在不知道列表有多大的情况下这样做。Java为3/2的原因很简单,因为有人认为它是最好的。
发布于 2014-02-07 10:53:40
我已经记录了一些关于增长因子的理论结果,它可以帮助您在这里为您自己的数据结构选择一个增长因子:幻数Factors#Grow因子。当预先不知道集合的大小时,增长因子越高,内存占用越大,“构造期间每个元素的重新插入”度量也就越低。
我同意AndréStannek的观点,即1.5增长系数没有任何特殊属性,这只是某人的“最终决定”。
https://stackoverflow.com/questions/21624515
复制相似问题