java - Java中 "for"语句每次循环都计算循环条件吗?

标签 java optimization loops

这是我的 Java 代码:

List<Object> objects = new ArrayList();

// Assign values to objects
...

for (int i = 0; i < objects.size(); i++) {
    Object object = objects.get(i);
    ...
}

我有两个问题:

  1. objects.size() 是在循环之前只计算一次,还是每次循环都计算一次?
  2. 如果每次循环都计算objects.size(),如果没有多线程保护,其他线程同时更改它,代码可能会崩溃。

我说的对吗?

最佳答案

答案:

  1. objects.size() 在每个循环中被调用(是否被计算取决于 ArrayList 的实现,你不应该关心它关于)
  2. 是的,另一个线程可能会更改列表,这会影响您的循环

真实答案:

您不必关心,以下是您不必关心的方式:

  1. 使用 CopyOnWriteArrayList ,这是线程安全的。如果您使用迭代器对其进行迭代(正如 foreach 语法在内部使用的那样),您将迭代列表就像迭代开始时一样
  2. 使用 foreach 语法,这意味着您不必使用索引等 - 它已为您完成:

for (Object object : objects) {
    // do something with each object 
}

关于java - Java中 "for"语句每次循环都计算循环条件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8426693/

相关文章:

java - 无法使用 renameTo 将文件移动到另一个目录

java - 定期 JavaFX 服务

algorithm - 如何在任意四边形内刻上一个矩形或圆形

javascript - 3维数组到对象数组

python - itertools 使用列表进行计数

java - 范围类 : java interoperability

java - 无法从静态上下文引用非静态方法 setPrzechowaj(java.lang.String)

javascript - 优化在数组中搜索匹配项的 JavaScript 代码

android - 在 Android NDK 上优化应用程序

arrays - 遍历 perl 数组的第一个最多 n 个元素