Iterator Class和foreach构造之间的性能差异

all*_*lan 4 java design-patterns concurrentmodification

我运行了以下代码,但运行时有时会出现某种并发异常.

ArrayList<Mob> carriers = new ArrayList<Mob>();
ArrayList<Mob> mobs = new ArrayList<Mob>();
...
for (Mob carrier : carriers){
    for (Mob mob : mobs){
        checkInfections (carrier, mob);
    } 
}
Run Code Online (Sandbox Code Playgroud)

我重构它来解决并发问题,但它确实引出了一个问题.如果我将for构造更改为Iterator模式,性能会有差异吗?foreach构造和Iterator类之间的访问级别差异是什么?

cle*_*tus 8

区别在于语法糖,除了Iterator可以从中删除项目的Collection迭代.从技术上讲,增强型for循环允许您循环遍历任何内容Iterable,其中至少包括Collections和数组.

不要担心性能差异.这种微观优化是无关紧要的分心.如果您需要随时删除项目,请使用Iterator.否则for循环往往更常用,因为它们更具可读性,即:

for (String s : stringList) { ... }
Run Code Online (Sandbox Code Playgroud)

VS:

for (Iterator<String> iter = stringList.iterator(); iter.hasNext(); ) {
  String s = iter.next();
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • 为了超级迂腐,增强的`for`循环允许你循环遍历任何"Iterable"或数组,并且数组不是"Iterable". (3认同)