我不确定这种方法如何工作。我了解的是,我们创建了一个临时数组,其大小是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
仍将引用新数组。