一.Java常见的集合遍历方式
1.for循环实现集合遍历
例:
String[] arr = {"Hello","World","Java"}; //定义集合对象,并进行初始化
for(int i=0;i<arr.length;i++) //采用for循环实现对集合的遍历
{
System.out.println(arr[i]);
}
2.iterator迭代器实现集合遍历
//这里只展示主函数中的内容,导包操作忽略不表
List<String> list = new ArrayList<String>();
list.add("Hello");
list.add("World");
list.add("Java");
Iterator it = list.iterator();
while(it.hasNext)
{
String s = it.next();
System.out.println(s);
}
3.ListIterator列表迭代器实现遍历操作
List<String> list = new ArrayList<String>();
list.add("Hello");
list.add("World");
list.add("Java");
ListIterator<String> it = list.listIterator();
while(it.hasNext())
{
String s = it.next();
System.out.println(s);
}
4.增强for循环
List<String> list = new ArrayList<String>();
list.add("Hello");
list.add("World");
list.add("Java");
for(String s : list)
{
System.out.println(s);
}
二.并发修改异常
当使用Iterator实现集合遍历的途中进行其他插入删除操作,则会产生并发修改异常错误。
Exception in thread "main" java.util.ConcurrentModificationException
at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1042)
at java.base/java.util.ArrayList$Itr.next(ArrayList.java:996)
at Demo.main(Demo.java:17)
Iterator<String> it = list.iterator();
while(it.hasNext())
{
String s = it.next();
if(s.equals("World"))
{
list.add("Javase");
}
System.out.println(s);
}
//Exception in thread "main" java.util.ConcurrentModificationException
at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1042)
at java.base/java.util.ArrayList$Itr.next(ArrayList.java:996)
at Demo.main(Demo.java:17)
并发修改异常出现原因为:在采用迭代器进行集合遍历的过程中,如果进行数据元素的插入与删除操作,则迭代器无法明确此时集合中的数据元素个数,无法完成集合的迭代操作,因此产生并发修改异常。
并发修改异常解决办法:
1.采用for循环的方式
List<String> list = new ArrayList<String>();
list.add("Hello");
list.add("World");
list.add("Java");
for(int i=0;i<list.size();i++)
{
String s = list.get(i);
if(s.equals("World"))
{
list.add("Javase");
}
System.out.println(s);
}
2.采用LIstIterator列表迭代器
List<String> list = new ArrayList<String>();
list.add("Hello");
list.add("World");
list.add("Java");
ListIterator<String> it = list.listIterator();
while(it.hasNext())
{
String s = it.next();
if(s.equals("World"))
{
it.add("Javase");
}
}
for(String s : list)
{
System.out.println(s);
}