执行此代码后HashMap会发生什么?
HashMap m = new HashMap();
for (int i = 0; i < 1024 * 1024; i++)
m.put(i, i);
m.clear();
在1M之后,内部哈希表将从原来的16增长到1MB。 clear()是否将其调整为原始大小?
答案 0 :(得分:4)
没有。桌子保留了它的大小。所有元素都设置为null
:
public void clear() {
modCount++;
Entry[] tab = table;
for (int i = 0; i < tab.length; i++)
tab[i] = null;
size = 0;
}
答案 1 :(得分:2)
这是一个实现细节,我不知道what API you're reading有关1M put或内部哈希表的任何内容。
让我们看一下实现:
620 /**
621 * Removes all of the mappings from this map.
622 * The map will be empty after this call returns.
623 */
624 public void clear() {
625 modCount++;
626 Entry[] tab = table;
627 for (int i = 0; i < tab.length; i++)
628 tab[i] = null;
629 size = 0;
630 }
http://www.docjar.com/html/api/java/util/HashMap.java.html#621
因此OpenJDK 7实现不会恢复原始大小。