for循环:如何解释更改ArrayList大小?

时间:2016-10-01 18:03:46

标签: java loops arraylist

当for循环由ArrayList的大小控制时

import Data.Complex
import Data.List (iterate)

{- ... -}

o :: Num (Complex a) => Complex a -> [Complex a]
o c = tail (iterate p iv)
  where
    iv = 0  -- or "0 :+ 0", if you want to be explicit
    p z = z^2 + c

但循环的每次迭代都是在列表中添加一个元素,然后循环如何识别大小正在变化?我认为一旦代码被发送到编译器,它将看到大小一次然后执行直到它达到原始大小,但显然不是这种情况。随着大小的增加,循环运行的次数也会增加。我认为它不会,所以显然我不明白计算机是如何读取它的。我只是想知道系统如何读取这样的东西。

另外,有没有办法让循环只运行原始列表大小的次数(每次迭代再次添加元素)?假设你事先不知道大小,所以你不能输入一些常数。

3 个答案:

答案 0 :(得分:7)

在每次迭代开始时,评估中间表达式。如果是,则循环继续。如果为假,则循环中断。因此,它将在每次迭代时重新评估大小。

要使其循环列表原始大小的次数,请执行以下操作:

int size = someArrayList.size();
for (i = 0 ; i < size ; i++) { ... }

或者如果你想得到幻想:

for (i = 0, size = someArrayList.size() ; i < size ; i++) { ... }

答案 1 :(得分:1)

在ArrayList中实现add()方法时,会更新存储arraylist大小的成员变量,而size()表示此成员变量的getter,因此在每次迭代时调用此大小,以便获得更新版本的大小。

答案 2 :(得分:1)

每次迭代都会调用.size()。这就是循环遍历迭代器的原因,如果你只是在循环永远不会结束时评估.hasNext()。要仅在列表上迭代原始大小的次数,您可以执行以下操作:

final int originalSize = list.size();

for (int i = 0; i < originalSize; i++) {
...
}