首页 > 代码库 > java迭代器
java迭代器
java迭代器Iterator用于依次访问集合中的元素,用于替代Enumeration。
Iterator接口方法如下所示:
1 public interface Iterator<E> { 2 boolean hasNext() ; 3 // 如果仍有元素可以迭代,则返回 true。 4 E next() ; 5 // 返回迭代的下一个元素。 6 void remove() ; 7 // 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。 8 9 }10
通过反复调用next方法,可以逐个访问集合中的每个元素,但是,如果到达了集合的末尾,next方法将抛出一个NoSuchElementException异常,因此,在调用next方法之前要调用hasNext方法,如果迭代器对象还有多个共访问的对象,返回true。
例如:
1 Iterator it=collection.iterator();2 while(it.hasNext()){3 Object obj=it.next();4 }
集合元素被访问的顺序取决于集合类型。如果对ArrayList进行迭代,迭代器将从索引0开始,每迭代一次索引值加1;访问HashSet中的元素,元素会按照某种随机的顺序出现。
java迭代器当前位置被认为是在两个元素之间,当调用next时,迭代器就越过下一个元素,并返回刚刚越过的那个元素的引用。查找操作与索引位置变更紧密相连,查找一个元素的唯一方法是next,在迭代器执行查找操作时,迭代器位置向前移动。
Iterator接口的remove方法将删除上次调用next方法时返回的元素。remove方法与next方法相互依赖,如果调用remove方法之前没有调用next方法,将抛出IllegalStateException异常。
Iterator有一个子接口ListIterator,用于访问有序集合如:LinkedList。
ListIterator方法如下所示:
1 public interface ListIterator<E> extends Iterator<E> { 2 void add(E e) ; 3 // 将指定的元素插入列表(可选操作)。 4 boolean hasNext() ; 5 // 以正向遍历列表时,如果列表迭代器有多个元素,则返回 true(换句话说,如果 next 返回一个元素而不是抛出异常,则返回 true)。 6 boolean hasPrevious() ; 7 // 如果以逆向遍历列表,列表迭代器有多个元素,则返回 true。 8 E next() ; 9 // 返回列表中的下一个元素。 10 int nextIndex() ;11 // 返回对 next 的后续调用所返回元素的索引。 12 E previous() ;13 // 返回列表中的前一个元素。 14 int previousIndex() ;15 // 返回对 previous 的后续调用所返回元素的索引。 16 void remove() ;17 // 从列表中移除由 next 或 previous 返回的最后一个元素(可选操作)。 18 void set(E e) ;19 // 用指定元素替换 next 或 previous 返回的最后一个元素(可选 操作)。 20 }
ListIterator接口可以前后遍历集合中的元素,并可以添加,删除元素。当添加元素时,元素添加到当前迭代器位置之前。删除元素与next,previous紧密关联,调用remove方法之前,必须先调用next或previous方法。
java迭代器