迭代器遍历
注意事项一:
如果调用remove之前没有调用next是不合法的,会抛出IllegalStateException
Iterator it = list.iterator(); while (it.hasNext()) { // 调用remove之前没有调用next是不合法的 // it.remove(); // java.lang.IllegalStateException String next = (String) it.next(); System.out.println(next); }
迭代器在变量元素的时候要注意事项二:
在迭代器迭代元素 的过程中,不允许使用集合对象改变集合中的元素个数,如果需要添加或者删除只能使用迭代器的方法进行操作。
如果使用过了集合对象改变集合中元素个数那么就会出现ConcurrentModificationException异常。
迭代元素 的过程中: 迭代器 创建到使用结束的时间。public class test_1 { public static void main(String[] args) { List list = new ArrayList(); list.add("仙女"); list.add("女侠"); ListIterator it = list.listIterator(); list.add("付祖贤"); it.next(); System.out.println("集合的元素: " + list); } }
这样会出现错误!
public class test_1 { public static void main(String[] args) { List list = new ArrayList(); list.add("仙女"); list.add("女侠"); ListIterator it = list.listIterator(); while(it.hasNext()){ System.out.print(it.next()+","); it.add("aa"); // 把元素添加到当前指针指向位置, 必须使用迭代器的方法添加 // list.add("aa"); // add方法是把元素添加到集合的末尾处的。 这种方法出错! } System.out.println("集合的元素: " + list); } }
如果是List集合,想要在迭代中操作元素可以使用List集合的特有迭代器ListIterator,该迭代器支持在迭代过程中,添加元素和修改元素。
List特有的迭代器ListIterator
* List 接口中特有的方法:
* 迭代:
* listIterator() 返回此列表元素的列表迭代器(按适当顺序)。
*
* hasPrevious()
* 如果以逆向遍历列表,列表迭代器有多个元素, 判断是否有上一个元素,则返回 true
*
* previous() 返回列表中的前一个元素, 当前指针向上移动一个单位,然后取出当前指针指向的元素
* next() 先取出当前指针指向的元素,然后指针向下移动一个单位
* add(E e) 将指定的元素插入列表,把当前元素插入到当前指针指向的位置,后面的元素下移
*
* set(E e) 用指定元素替换 next 或 previous 返回的最后一个元素
使用三种方式遍历集合的元素.
第一种: 使用get方法遍历。第二种: 使用迭代器 正序 遍历。
第三种: 使用迭代器 逆序 遍历。
public class test_1 { public static void main(String[] args) { List list = new ArrayList(); list.add("张三"); list.add("李四"); list.add("王五"); System.out.println("======get方法遍历======="); for(int i = 0 ; i<list.size() ; i++){ System.out.print(list.get(i)+","); } System.out.println("\r\n======使用迭代器正序遍历=========="); ListIterator it = list.listIterator(); //获取到迭代器 while(it.hasNext()){ System.out.print(it.next()+","); } System.out.println("\r\n======使用迭代器逆序遍历=========="); while(it.hasPrevious()){ System.out.print(it.previous()+","); } } }