Ruc*_*era 45 java foreach iterator
请考虑以下情形.
List<String> list = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
现在我添加了String
此列表的值.
我使用以下方法来查看列表中的每个元素.
选项一 - 使用 for-each
for (String i : list) {
System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud)
选项二 - 使用 Iterator
Iterator it=list.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
Run Code Online (Sandbox Code Playgroud)
我只是想知道如果我使用for-each
而不是有任何性能优势Iterator
.现在在Java中使用Iterator也是一种不好的做法?
Tal*_*ala 87
for-each
是使用的语法糖iterators
(方法2).
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
}
Run Code Online (Sandbox Code Playgroud)
Ash*_*sia 16
区别在于语法糖,除了Iterator可以从正在迭代的Collection中删除项目.从技术上讲,增强的for循环允许你遍历任何Iterable,它至少包括Collections和数组.
不要担心性能差异.这种微观优化是无关紧要的分心.如果您需要随时删除项目,请使用迭代器.否则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-each
是一个高级循环结构.在内部,它创建一个迭代器并迭代Collection.只有在for-each
构造上使用实际Iterator对象的可能优点是,您可以使用Iterator的方法修改集合.remove()
.在迭代时不使用Iterator方法修改集合将产生ConcurrentModificationException.
归档时间: |
|
查看次数: |
57948 次 |
最近记录: |