我不确定这种方法如何工作。我了解的是,我们创建了一个临时数组,其大小是theItems.length的两倍(theItems是另一个数组)。之后,我们将项目复制到temp数组中,最后编写theItems = temp; (我不确定为什么会发生什么)(这是否意味着Items的大小也会增加一倍?)。我们不能在不使用temp的情况下将项目的大小加倍吗?

private void resize() {
    String[] temp = new String[theItems.length*2];
    for (int i=0 ; i < noOfItems ; i++){
        temp[i]=theItems[i];
    }
    theItems=temp;
}

最佳答案

我不确定为什么会发生什么


您正在创建另一个具有更多空间容纳其他元素的阵列。数组在Java中具有固定大小;一旦创建,就无法更改。在这里,新数组的长度是旧数组的两倍。然后,一个简单的for循环复制元素引用。


这是否意味着theItems的大小也增加了一倍?


不,将数组引用theItems重新分配给刚创建的更大的新数组。


我们不能在不使用temp的情况下将项目的大小加倍吗?


您可以将theItems替换为新数组,但随后丢失了对原始数组的引用,该原始数组包含要保留的所有项目,因此没有用。

这是发生了什么:


初始条件。

theItems -> ["one", "two", "three"]

创建新数组。

theItems -> ["one", "two", "three"]

temp     -> [null , null , null , null, null, null]

项目已复制。

theItems -> ["one", "two", "three"]

temp     -> ["one", "two", "three", null, null, null]

变量theItems被重新分配。

theItems \       ["one", "two", "three"]  <- will be garbage collected.
         |
temp   --+> ["one", "two", "three", null, null, null]



变量temp将超出范围,但theItems仍将引用新数组。

07-24 09:35