Java学习笔记之Iterator和ListIterator【数组迭代器,遍历,并发修改异常】

Iterator接口是对collection进行迭代的迭代器,ListIterator接口是其子接口。它们都是遍历集合的工具。 
Collection依赖于Iterator,其实现类都必须实现iterator()函数,返回一个Iterator对象;ListIterator是专门遍历List而存在的。

Iterator

Iterator迭代器包含以下三种方法:

  1. boolean hasNext():如果仍有元素可以迭代,则返回 true
  2. E next():返回迭代的下一个元素
  3. void remove():从迭代器指向的collection中移除迭代器返回的最后一个元素,每次调用next只能调用一次此方法【Iterator while遍历完之后使用 移除最近返回的一个元素】

ListIterator

ListIterator迭代器包含以下九种方法:

  1. void add(E e):将指定的元素插入列表
  2. boolean hasNext() :以正向遍历列表时,如果列表迭代器有多个元素,则返回 true
  3. boolean hasPrevious() :如果以逆向遍历列表,列表迭代器有多个元素,则返回 true
  4. E next():返回列表中的下一个元素
  5. int nextIndex() :返回对 next 的后续调用所返回元素的索引
  6. E previous():返回列表中的前一个元素
  7. int previousIndex() :返回对 previous 的后续调用所返回元素的索引
  8. void remove() :从列表中移除由 next 或 previous 返回的最后一个元素
  9. void set(E e):用指定元素替换 next 或 previous 返回的最后一个元素

IteratorListIterator的区别

共同点:都可以对集合中的元素进行遍历 
不同点:

  1. 使用范围不同:Iterator可应用于所有的集合,而ListIterator只能用于List及其子类型,如ListArrayListLinkedListVector
  2. ListIteratoradd()方法,可以向List中添加对象,而Iterator不能
  3. ListIteratorIterator都有hasNext()next()方法,可以实现顺序向后遍历,但是ListIteratorhasPrevious()previous()方法,可以实现逆向(顺序向前)遍历。Iterator不可以。
  4. ListIterator可以定位当前的索引位置,nextIndex()previousIndex()可以实现。而Iterator不能。
  5. ListIterator可通过set()方法实现对象的修改,而Iierator仅能遍历,不能修改
  6. ListIterator可实现双向遍历 有hasPrevious()previous()方法,而Iterator只能顺序向前遍历
  7. ListIterator可通过add()添加对象,而Iterator不能

并发修改异常

在迭代过程中,被迭代的集合发生了变化才引发的

如果对一个集合要一边遍历,一边操作元素,使用ListIterator这个类来实现,通过迭代器来添加元素

你可能感兴趣的:(java)