For-each vs 迭代器。哪个是更好的选择

2022-08-31 17:26:17

请考虑以下方案。

List<String> list = new ArrayList<>();

现在我添加了此列表的值。String

我使用以下方法去列表中的每个元素。

选项一 - 使用for-each

for (String i : list) {
        System.out.println(i);
    } 

选项二 - 使用Iterator

Iterator it=list.iterator();
while (it.hasNext()){
   System.out.println(it.next());
}

我只是想知道如果我使用而不是,是否有任何性能优势。而且,现在在Java中使用Iterator是一种不好的做法吗?for-eachIterator


答案 1

for-each是用于使用的句法糖(方法2)。iterators

如果需要在循环中修改集合,则可能需要使用。第一种方法将引发异常。iterators

for (String i : list) {
    System.out.println(i);
    list.remove(i); // throws exception
} 

Iterator it=list.iterator();
while (it.hasNext()){
    System.out.println(it.next());
    it.remove(); // valid here
}

答案 2

区别很大程度上在于语法糖,除了迭代器可以从它正在迭代的集合中删除项。从技术上讲,增强的 for 循环允许您循环访问任何可迭代的内容,其中至少包括集合和数组。

不必担心性能差异。这种微优化是一种无关紧要的干扰。如果需要随时删除项目,请使用迭代器。否则,for 循环往往被更多地使用,因为它们更具可读性,即:

for (String s : stringList) { ... }

与:

for (Iterator<String> iter = stringList.iterator(); iter.hasNext(); ) {
  String s = iter.next();
  ...
}