package csdn003;
import java.util.HashMap;
import java.util.Map;
public class HashMapTest {
public static void main(String[] args) {
// 5 * 3 / 4
Map<Integer,Integer> map = new HashMap<>(12);
map.put(1,1);
map.put(2,2);
map.put(3,3);
map.put(4,4);
map.put(5,5);
map.put(6,6);
map.put(7,7);
map.put(8,8);
map.put(9,9);
System.out.println(9/0.75);
}
}
上面的12,真的能存1-12个元素吗?,不进行第二次扩容吗?第一次默认扩容。
推导
如果你写的初始化数字(意思是你想存n个元素),比如n有一下规则:
1、在0-6区间:实际上他要进行一次扩容。6是这么来的,80.75=6.其中8是默认的,0.75是加载因子。如果你写的是7,其实要扩容两次。你直接写(7/0.75=9.333333)10就合适。
2、规律是你写0-8,实际上能最多存6(80.75)个元素。
3、你写8-16,实际上能最多存12(16*0.75)个元素。
结论
如果您想存19个元素,你就计算19/0.75=25.333…,大概是26.,
Map map = new HashMap(26);
你就得写成上面的代码。才能保证进行一次扩容。