Java知识点–遍历集合的几种方式
1.使用Lambda表达式遍历集合
import java.util.HashMap;
import java.util.Map;
public class test01 {
public static void main(String[] args) {
Map<String, String> map=new HashMap<String, String>();
map.put("疾风剑豪", "亚索");
map.put("无双剑姬", "菲奥娜");
map.put("无极剑圣", "易");
map.forEach((key,value)->System.out.println(key+"---"+value));
}
}
2.使用Iterator遍历集合元素
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class test02 {
public static void main(String[] args) {
List<String> list=new ArrayList<String>();
list.add("蓝buff");
list.add("蓝buff左面的儿子");
list.add("蓝buff右面的儿子");
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()) {
String val=(String)iterator.next();
System.out.println(val);
if("蓝buff".equals(val)) {
iterator.remove();
}
//对val赋值,不会改变集合
val="小龙";
}
System.out.println(list);
}
}
在上述代码中,我们在迭代的过程中删除集合元素,注意,这个行为并不是很稳定,通常情况下会导致异常,不要用!!!
这样就会翻车
import java.util.HashSet;
import java.util.Iterator;
public class test03 {
public static void main(String[] args) {
HashSet<String> list=new HashSet<String>();
list.add("蓝buff");
list.add("蓝buff左面的儿子");
list.add("蓝buff右面的儿子");
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()) {
String val=(String)iterator.next();
System.out.println(val);
if("蓝buff右面的儿子".equals(val)) {
list.remove(val);
}
}
}
}
iterator使用的是快速失败机制,一旦在迭代的过程中发现元素修改,立即引发java.util.ConcurrentModificationException异常,强烈建议不要这么用!!!
3.使用Lambda表达式遍历 Iterator
import java.util.HashSet;
import java.util.Iterator;
public class test04 {
public static void main(String[] args) {
HashSet<String> list=new HashSet<String>();
list.add("蓝buff");
list.add("蓝buff左面的儿子");
list.add("蓝buff右面的儿子");
Iterator<String> iterator = list.iterator();
iterator.forEachRemaining(val->System.out.println(val));
}
}
4.使用foreach循环遍历元素
import java.util.ArrayList;
import java.util.List;
public class test05 {
public static void main(String[] args) {
List<String> list=new ArrayList<String>();
list.add("蓝buff");
list.add("蓝buff左面的儿子");
list.add("蓝buff右面的儿子");
for(String val:list) {
System.out.println(val);
if("蓝buff".equals(val)) {
list.remove(val);
}
}
}
}
同样 会诱发错误,我们不建议在foreach循环删除集合元素