HashMap.clear()会将内部哈希表调整为原始大小吗?

3
这段代码执行后,HashMap会发生什么变化?
HashMap m  = new HashMap();
for (int i = 0; i < 1024 * 1024; i++)
    m.put(i, i);
m.clear();

在插入1M个元素后,内部哈希表将从原来的16个增长到1MB。调用clear()方法会将其大小调整回原始大小吗?


我猜不需要那样做,那会增加额外的工作量。 - Azodious
2个回答

4
不会的。表格保留了它的大小。所有元素都设置为null:
public void clear() {
    modCount++;
    Entry[] tab = table;
    for (int i = 0; i < tab.length; i++)
        tab[i] = null;
    size = 0;
}

2
这是一个实现细节,我不知道您正在阅读的API是否有关于1M puts或内部哈希表的说明。
让我们来看一下具体的实现:
  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实现不会恢复原始大小。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接