有规律的整数/字符串
@Test
public void testHashSize() {
HashMap<String, Integer> inte = new HashMap<>(1);
for (int i = 0; i < 100000000; i++) {
inte.put(i , (int) (100000*Math.random()));
}
}
这个时候往往不会构建链表和红黑色。而是底层真的是数组。
无规律的key
@Test
public void testHashSize() {
HashMap<String, Integer> inte = new HashMap<>(1);
for (int i = 0; i < 1_0000_0000; i++) {
inte.put(String.valueOf(i*Math.random()) , (int) (100000*Math.random()));
}
}
内存中数组长度,元素个数。
使用下面的代码看看talbe[]中有多少不为空:
int a = 0;for(int i = 0; i < table.length * loadFactor ; i++) {if (table[i] != null) { a++; }}System.out.println(a);
得到的结果是:
201960 / 524288 = 38.52%,
其实HashMap对数组的利用并不高,但是数组只是一个指针,指向堆中的对象。所以这种浪费并不大,所以就算浪费了很多栈内存,但是相对来说还是很小,所以放心大胆使用HashMap吧。