迭代器

来源:互联网 发布:org.w3c.dom.node jar 编辑:程序博客网 时间:2024/06/07 03:28

概念:

迭代器是一种模式,它可以使得对于序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的。只要拿到这个对象,使用迭代器就可以遍历这个对象的内部.


Java提供一个专门的迭代器<<interface>>Iterator,我们可以对某个序列实现该interface,来提供标准的Java迭代器。Iterator接口实现后的功能是“使用”一个迭代器.

Iterator


##迭代器的创建和使用


利用Iterator接口创建迭代器,Iterator接口位于java.util包下。


Iterator接口有3个方法:

  • hashNext():如果仍有元素可以迭代,则返回true。
  • next():返回迭代的下一个元素。
  •  remove():从迭代器指向的collection中移除迭代器返回的最后一个元素(可先操作)。

ListIteratro接口继承了Iterator接口,并且具有更多的方法。


Demo

import java.util.ArrayList;import java.util.Collections;import java.util.ListIterator;public class ListIteratorDemo {public static void main(String[] args){//创建一个ArrayList,其中能够保存的数据类型是IntegerArrayList<Integer> array=new ArrayList<Integer>();//使用Collections类中的方法addAll()向集合中增加元素Collections.addAll(array, 1,2,3,4,5,6);System.out.println("集合中的元素:"+array);//使用无参的方法获得ListIterator对象ListIterator<Integer> iterator=array.listIterator();//对于初始位置,判断是否具有下一个元素boolean hasNext=iterator.hasNext();System.out.println("集合是否具有下一个元素"+hasNext);boolean hasPrevious=iterator.hasPrevious();System.out.println("集合是否具有前一个元素"+hasPrevious);int next=iterator.next(); //获得下一个元素System.out.println("获得集合的下一个元素"+next);int nextIndex=iterator.nextIndex();//获得下一个元素的索引System.out.println("获得下一个元素的索引"+nextIndex);int previous=iterator.previous();System.out.println("获得集合的前一个元素"+previous);int previousIndex=iterator.previousIndex();System.out.println("获得集合的前一个元素的索引"+previousIndex);iterator.add(7);   //向列表中增加元素7System.out.println("向集合中增加元素7之后的集合:"+array);iterator.next();//获得下一个元素iterator.set(12);//将获得的元素设置为12System.out.println("将获得的下一个元素修改为12后的集合"+array);iterator.remove();System.out.println("将获得的下一个元素删除后的集合:"+array);}}

结果:

集合中的元素:[1, 2, 3, 4, 5, 6]
集合是否具有下一个元素true
集合是否具有前一个元素false
获得集合的下一个元素1
获得下一个元素的索引1
获得集合的前一个元素1
获得集合的前一个元素的索引-1
向集合中增加元素7之后的集合:[7, 1, 2, 3, 4, 5, 6]
将获得的下一个元素修改为12后的集合[7, 12, 2, 3, 4, 5, 6]
将获得的下一个元素删除后的集合:[7, 2, 3, 4, 5, 6]


Demo2:

Iterator遍历ArrayList

import java.util.ArrayList;import java.util.List;import java.util.ListIterator;public class IteratorDemo {public static void main(String[] args) {//创建列表List<Integer> list=new ArrayList<Integer>();//向表中增加10个元素for(int i=0;i<10;i++){list.add(i);}System.out.println("列表中的全部元素"+list);System.out.println("逆序输出列表中的元素:");//获得ListIterator对象ListIterator <Integer> li=list.listIterator();//将游标定义到列表结尾for(li=list.listIterator();li.hasNext();){li.next();}//逆序输出列表中的元素for(;li.hasPrevious();){System.out.print(li.previous()+" ");}}}
结果:

列表中的全部元素[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
逆序输出列表中的元素:
9 8 7 6 5 4 3 2 1 0 

Demo3

import java.util.*;public class TestDemo {public static void main(String[] args) {List list = new ArrayList();Map map = new HashMap();for (int i = 0; i < 10; i++) {list.add(new String("list" + i));map.put(i, new String("map" + i));}Iterator iterList = list.iterator();// List接口实现了Iterable接口while (iterList.hasNext()) {String strList = (String) iterList.next();System.out.println(strList.toString());}Iterator iterMap = map.entrySet().iterator();while (iterMap.hasNext()) {Map.Entry strMap = (Map.Entry) iterMap.next();System.out.println(strMap.getValue());}}}
结果:

list0
list1
list2
list3
list4
list5
list6
list7
list8
list9
map0
map1
map2
map3
map4
map5
map6
map7
map8
map9
Iterable

原创粉丝点击