このコードの実行後、HashMap はどうなりますか?
HashMap m = new HashMap();
for (int i = 0; i < 1024 * 1024; i++)
m.put(i, i);
m.clear();
1M プット後、内部ハッシュ テーブルは元の 16 から 1MB に増加します。clear() は元のサイズにサイズ変更しますか?
いいえ。テーブルはそのサイズを保持します。すべての要素が次のように設定されていnull
ます。
public void clear() {
modCount++;
Entry[] tab = table;
for (int i = 0; i < tab.length; i++)
tab[i] = null;
size = 0;
}
これは実装の詳細であり、あなたが読んでいる API が 1M プットまたは内部ハッシュ テーブルについて何かを述べているかはわかりません。
実装を見てみましょう。
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 実装は元のサイズを復元しません。