关于Java中使用K=1.5的理由
来源:2-7 动态数组

软件工程小白菜
2019-09-17
波波老师您好,在课程中,您指出在Java的ArrayList实现中,扩容常数K并没有选择我们所用来实现的2,而是选择的1.5。请问老师可不可以简单讲解下选择K=1.5和K=2的不同,以及选择1.5的理由和好处呢?
谢谢老师!
写回答
1回答
-
这种“超参数”的选取,通常没有理论原因,都是统计原因。如果你学习过我的“机器学习”课程,应该对超参数理解的更深刻。
显然 k 越大,触发扩容的概率越低,意味着平均性能更优,但可能浪费的空间越多;反之,k越小,触发扩容的概率越高,意味着平均性能越低,但可能浪费的空间越小。具体 k 选择多少,是在这二者之间选取一个平衡。
我不知道为什么 java 选择 1.5,我个人不认为选择 1.6 或者 1.7 或者 2 会有多么大的问题。Java 的工程师选择了 1.5 应该有他们的统计基础,但也很有可能就是闭着眼睛选的。你可以给 Oracle 官方写信,询问一下这个问题,我觉得是很好的问题。
当然,其实类似这样的问题还能问出很多。比如 Java 的 ArrayList 默认初始空间大小是 10。为什么是 10,不是 20?或者 15?
继续加油!:)
212019-09-17
相似问题