java.util.Iterator(迭代器)
来源:互联网 发布:纯真ip数据库 mysql 编辑:程序博客网 时间:2024/05/22 10:55
Iterator(迭代器)
作者:zccst
java.util.Iterator接口描述的是以统一的方式对各种集合元素进行遍历/迭代的工具,也称“迭代器”。
迭代器(Iterator)模式,又叫做游标(Cursor)模式,是用于遍历集合类的标准访问方法。GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。
java.util.Iterator接口的定义:
public interface Iterator {
boolean hasNext(); //是否有下一个,有返回true,否则返回false
Object next(); //遍历到下一个
void remove(); //删除当前元素
}
不难看出,允许在“遍历”过程中移除集合中的(当前遍历到的那个)元素。
其实依赖前两个方法就能完成遍历,典型的代码如下:
for(Iterator it = c.iterator(); it.hasNext(); ) {
Object o = it.next(); // 对o的操作...
}
每一种集合类返回的Iterator具体类型可能不同,Array可能返回ArrayIterator,Set可能返回SetIterator,Tree可能返回TreeIterator,但是它们都实现了Iterator接口,因此,客户端不关心到底是哪种Iterator,它只需要获得这个Iterator接口即可,这就是面向对象的优势。
注:试想,如果没有使用Iterator,遍历一个数组的方法是使用索引:
for(int i=0; i<array.size(); i++) { ... get(i) ... }
而访问一个链表(LinkedList)又必须使用while循环:
while((e=e.next())!=null) { ... e.data() ... }
以上两种方法客户端都必须事先知道集合的内部结构,访问代码和集合本身是紧耦合,无法将访问逻辑从集合类和客户端代码中分离出来,每一种集合对应一种遍历方法,客户端代码无法复用。而且,如果以后需要把ArrayList更换为LinkedList,则原来的客户端代码必须全部重写。
例如1:TestIterator.java
import java.util.Date;
import java.util.ArrayList;
import java.util.Vector;
import java.util.Iterator;
public class TestIterator{
publicstatic void main(String[] args) {
ArrayLista = new ArrayList();
a.add("China");
a.add("USA");
a.add("Korea");
Iterator it = a.iterator(); //用it完成遍历
while(it.hasNext()){
Stringcountry = (String)it.next(); //这样就返回String类型
System.out.println(country);
}
Vectorv = new Vector();
v.addElement(newDate());
v.addElement(newDate(200008755554L));
it= v.iterator();
while(it.hasNext()){
Datetime = (Date)it.next();
System.out.println(time);
}
}
}
输出结果:
China
USA
Korea
Sun Dec 27 18:53:27 CST 2009
Tue May 04 05:59:15 CST 1976
例如2:Person.java、TestIterator2.java
注:本例有两个文件,如果放在同一个包里可以直接使用;如果在不同包,需用import一下。
(1) Person.java
package test.src.test; //这是我的Person.java文件所在包,需根据实际情况修改
public class Person{
privateString name;
privateint age;
publicPerson(String name,int age){
this.name= name;
this.age= age;
}
publicvoid setName(String name){
this.name= name;
}
publicString getName(){
returnname;
}
publicvoid setAge(int age){
this.age= age;
}
publicint getAge(){
returnage;
}
publicString toString(){
return"Name: " + name + "/tAge: " + age;
}
}
(2) TestIterator2.java
package test.src.test; //同理,需根据实际情况修改
import java.util.Vector;
import java.util.Iterator;
public class TestIterator2{
publicstatic void main(String[] args) {
Vectorv = new Vector();
v.addElement(newPerson("张三",18));
v.addElement(newPerson("李四",26));
v.addElement(newPerson("王五",34));
v.addElement(newPerson("赵六",40));
Iteratorit = v.iterator();
while(it.hasNext()){ //while循环输出每一个元素
Personp = (Person)it.next();
System.out.println(p);
if(p.getName().equals("王五")){
p.setAge(p.getAge()+ 50);
}elseif(p.getName().equals("李四")){
it.remove();
}
}
System.out.println("-----------------------");
for(inti=0;i<v.size();i++)
System.out.println(v.elementAt(i));
}
}
输出结果:
Name: 张三 Age: 18
Name: 李四 Age: 26
Name: 王五 Age: 34
Name: 赵六 Age: 40
-----------------------
Name: 张三 Age: 18
Name: 王五 Age: 84
Name: 赵六 Age: 40
- java.util.Iterator(迭代器)
- java.util.Iterator(迭代器)
- 迭代器(Iterator)的java.util.NoSuchElementException错误的改正
- Java - java.util.Iterator
- Java - java.util.Iterator
- java.util.Iterator翻译
- java.util.Iterator细说
- 11. java.util.Iterator
- java.util Iterable and Iterator
- Iterator错误:java.util.NoSuchElementException
- 集合迭代器Iterator与java.util.NoSuchElementException异常
- Iterator迭代器导致的java.util.NoSuchElementException原因与解决方法
- import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.TreeMap; /*
- 1-1、java.util.Iterator java.util.ListIterator
- java.util.ListIterator<E> java.util.Iterator<E> 的异同
- Java:迭代器(Iterator)
- java 迭代器(Iterator)
- java 迭代器(Iterator)
- Linux系统的硬件驱动程序编写原理
- 验证 HTML文件
- 最好的兄弟jin结婚了!
- 多文件上传(ajax)
- java压缩文件成tar.gz格式
- java.util.Iterator(迭代器)
- 关于工程、控件引用
- 静态web和动态web的区别与联系
- Set接口——HashSet和TreeSet
- Eclipse插件links安装:
- java.lang.Comparable接口
- VB获取执行程序图标
- 删除群集方法
- ubuntu 手动编译lamp