HashMap.clear()是否将内部哈希表的大小调整为原始大小?

时间:2013-02-08 06:07:08

标签: java hashmap clear

执行此代码后HashMap会发生什么?

HashMap m  = new HashMap();
for (int i = 0; i < 1024 * 1024; i++)
    m.put(i, i);
m.clear();

在1M之后,内部哈希表将从原来的16增长到1MB。 clear()是否将其调整为原始大小?

2 个答案:

答案 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实现不会恢复原始大小。