您的位置:首页 > Web前端

第46条:for-each循环优先于传统的for循环

2017-08-30 00:00 471 查看

1.代码直观对比

传统for循环

for (Iterator<String> i = list.iterator();i.hasNext();) {
doSomething(i.next());
}

for (int i = 0; i < list.size(); i++) {
doSomething(list.get(i));
}

for-each

for (String str : list) {
doSomething(str);
}

2.for-each的优势

比传统的for循环:

简洁性

有效预防bug

不用担心性能损失

关于有效预防bug以及简洁性,请看以下代码:

// 不简洁,同时易误导致bug
for (Iterator<String> i = list.iterator();i.hasNext();) {
for (Iterator<String> j = list2.iterator();j.hasNext();) {
doSomething(i.next(),j.next());
}
}

// 简洁
for (String s : list) {
for (String s1 : list2) {
doSomething(s,s1);
}
}

3.不能使用for-each情况

(1)过滤

如果需要遍历集合,并删除选定的元素,就需要使用显示的迭代器,以便可以调用它的remove方法。

// 正确做法
for (Iterator<String> i = list.iterator();i.hasNext();) {
i.next();  // 指向要删除的元素
i.remove();
}
// 错误做法
for (int i = 0; i < list.size(); i++) {
list.remove(i);
}
// 错误做法
for (String s : list) {
list.remove(s);
}

关于删除集合元素参考:Java循环删除集合多个元素的正确打开方式

(2)转换

如果需要遍历所有元素,然后重新设定某些值,那么就需要李彪迭代器或者数组索引,以便设定元素的值。

(3)平行迭代

就是并行地同时遍历多个集合,需要显示地控制迭代器或者索引变量,以便所有迭代器或者索引变量都可以得到同步前移。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息