Android谷歌io 2011 java源代码中的神奇数字

Android谷歌io 2011 java源代码中的神奇数字,android,collections,open-source,capacity,googleio,Android,Collections,Open Source,Capacity,Googleio,下面的代码摘自谷歌io开源 com.google.android.apps.iosched.util.Lists.java publicstaticarraylistnewarraylist(E…元素){ 整数容量=(elements.length*110)/100+5; ArrayList=新的ArrayList(容量); Collections.addAll(列表、元素); 退货清单; } com.google.android.apps.iosched.util.Sets.java p

下面的代码摘自谷歌io开源

com.google.android.apps.iosched.util.Lists.java

publicstaticarraylistnewarraylist(E…元素){
整数容量=(elements.length*110)/100+5;
ArrayList=新的ArrayList(容量);
Collections.addAll(列表、元素);
退货清单;
}
com.google.android.apps.iosched.util.Sets.java

publicstatichashset newHashSet(E…元素){
内部容量=元素长度*4/3+1;
哈希集=新哈希集(容量);
集合.addAll(集合、元素);
返回集;
}
容量变量的含义是什么?
提前谢谢

这是ArrayList类的一部分。预先设置容量可以防止大型列表在填充时必须递增地增加其大小,而是立即分配所需的空间


这些集合在内部使用固定数组来保存数据。“容量”是阵列可以容纳的元素的初始数量。当添加的元素超过当前容量时,必须扩展内部阵列。这是一个耗时的操作,如果您知道要添加多少元素,初始容量会起到帮助作用。

我的问题是,为什么他们使用这个奇怪的公式来计算每个集合的容量。整数容量=(elements.length*110)/100+5;,内部容量=元素长度*4/3+1;
public static <E> ArrayList<E> newArrayList(E... elements) {
    int capacity = (elements.length * 110) / 100 + 5;
    ArrayList<E> list = new ArrayList<E>(capacity);
    Collections.addAll(list, elements);
    return list;
}
public static <E> HashSet<E> newHashSet(E... elements) {
    int capacity = elements.length * 4 / 3 + 1;
    HashSet<E> set = new HashSet<E>(capacity);
    Collections.addAll(set, elements);
    return set;
}