java中的Iterator迭代器

Iterator迭代器
Iterator模式是用于遍历集合类的标准访问方式.
Collection是集合类的基本接口,它的子接口有List,Set.其中List接口规定集合类元素具有可控制的顺序.Set接口规定集合类元素不能重复.

Collection接口中定义了方法iterator(),集合类对象如果直接或间接的实现了Collection接口,必然都实现了方法iterator(),这个方法用来返回当前集合对象的一个iterator迭代器,用于对该集合中元素进行遍历.因此迭代器是依赖于某个集合而存在的,本身不能独立存在。

迭代器有三个重要的方法

java中的Iterator迭代器_第1张图片


下面一个图是这三个方法的工作模式(个人理解)

java中的Iterator迭代器_第2张图片

下面以常用的ArrayList对象为例:

List list = new ArrayList();
		list.add("A");list.add("B");list.add("C");
		
		Iterator iter = list.iterator();             //获取list的迭代器
		while(iter.hasNext()){                 //判断该集合中是否还存在元素
			String s = (String) iter.next();  //返回迭代器的下一个元素
			System.out.println(s);
		}

其中需要注意的是remove()方法,remove()方法对next()方法具有依赖性,也就是说如果调用remove()方法之前没有调用next()方法是不合理的.如上面工作模式那个图,当最开始迭代器没有移动时,如果要删除元素A,就必须先使用next()方法越过元素A,然后remove()用来删除next()越过的对象。也就是说remove()删除的是next()返回的对象,如果事先没有用next()返回对象就调用remove()方法,会抛出异常.

说到这里,在简单说说迭代器遍历和普通遍历的区别:

如果是普通遍历,大部分会这样实现
List list = new ArrayList();
		list.add("A");list.add("B");list.add("C");
		
		for(int i=0;i

那么很明显,对于这种遍历,我们总是都事先知道集合的内部结构,访问代码和集合本身是紧密耦合的,无法将访问逻辑从集合类和客户端代码中分离出来.同时每一种集合对应一种遍历方法,客户端代码无法复用.那么当集合种类变多时,代码并不友好.而迭代器对不同集合类使用同样的逻辑来遍历集合,意思就是不用关注集合本身是怎样的,只需要控制iterator就好。


你可能感兴趣的:(java)