因此,我們有一個HashMap和一個瞬態Entry []表格。在許多方法,例如,在明確的(),我們複製表:關於Java HashMap源碼
public void clear() {
modCount++;
Entry[] tab = table;
for (int i = 0; i < tab.length; i++)
tab[i] = null;
size = 0;
}
但爲什麼我們做入口[]選項卡=表?下一個代碼有什麼問題?
public void clear() {
modCount++;
for (int i = 0; i < table.length; i++)
table[i] = null;
size = 0;
}
據我所知,標籤只是表格的參考,乍一看,只是空間的浪費。
浪費了什麼空間?方法局部變量很便宜,只要方法完成就立即消失。這是一種技術示例 - 在現代JVM中不太必要,但在最初編寫「HashMap」時是必需的,以緩存局部變量中的對象字段以提高速度。 – 2013-04-24 22:33:52
你不**複製**表格。這不是C++,沒有拷貝構造函數或任何涉及的東西。您只在參考和參考上進行操作。這項任務的成本幾乎沒有。 – 2013-04-24 22:40:40
Louis Wasserman,請你解釋一下,如何緩存局部變量中的對象字段可以加速? Daniel Kamil Kozar,是的,我知道這一點。 – user2317480 2013-04-24 22:46:21