遍历集合有两种方式:
1.toArray(),可以把集合转换成数组,然后遍历数组。
2.iterator(),可以返回一个迭代器对象,我们可以通过迭代器对象来遍历,迭代器是依赖于集合的,相当于集合的一个副 本,当迭代器在操作的时候,如果发现和集合不一样,则会抛出异常,"并发修改异常"。
Exception in thread "main" java.util.ConcurrenModificationException:并发修改异常
解决方法是:使用迭代器进行遍历的时候使用迭代器进行修改,使用 ListIterator 迭代器的add方法,同时迭代器会同步集合中 元素。
Iterator: 用于遍历集合。
ListIterator:系列表迭代器。
三个方法:
boolean hasNext():如果仍有元素可以迭代,则返回true,否则返回false。
Object next():返回迭代的下一个元素。
void remove():从迭代器指向的collection中移除迭代器返回的最后一个元素(可选操作)
//Iterator 迭代器
Collection c = new ArrayList();
c.add("hello");
c.add("world");
Iterator it = c.iterator();
System.out.println(it.next());
it.remove();//hello被移除,返回的元素被移除
System.out.println(it.next());
Object[] obj = c.toArray();
for (int i = 0; i < obj.length; i++) {
System.out.println(obj[i]);
}
Collection c1 = new ArrayList();
c.add("hello");
c.add("world");
Iterator it1 = c.iterator();
while (it1.hasNext()){//通过迭代器循环遍历集合
System.out.println(it1.next());
}
//ListIterator 系列表迭代器,解决并发修改异常
List l = new ArrayList();
l.add("hello");
l.add("world");
l.add("java");
ListIterator lt = l.listIterator();
while (lt.hasNext()){
String s = (String)lt.next();
if (s.equals("java")){
lt.add("android");
}
}