1

所以,我们有一个 HashMap,里面有一个临时的 Entry[] 表。在许多方法中,例如在 clear() 中,我们复制表:

public void clear() {
    modCount++;
    Entry[] tab = table;
    for (int i = 0; i < tab.length; i++)
        tab[i] = null;
    size = 0;
}

但是为什么我们做Entry[] tab = table?下一个代码有什么问题?

public void clear() {
    modCount++;
    for (int i = 0; i < table.length; i++)
        table[i] = null;
    size = 0;
}

据我所知, tab 只是对 table 的引用,乍一看,只是浪费空间。

4

2 回答 2

1
 for (int i = 0; i < table.length; i++)
        tab[i] = null;

你是对的,tab两者table都指向同一个对象。我看到的问题是在 for-conditional 中使用 table 和 for-body 中的选项卡。您应该使用其中一种,但不能同时使用。

tab是不必要的,但有时人们出于可读性原因这样做。在这里没有意义,因为表格更具可读性。如果我正在对其进行代码审查,我会非常喜欢第二个版本。

于 2013-04-24T22:07:32.063 回答
0

它只是一个本地范围的对象引用。那里没有太多空间。

于 2013-04-24T22:07:02.487 回答