1.Iterator接口方法
前面章节学习了Collection接口、Set接口和List接口,它们的实现类都没有提供边里集合的数据元素的方法,Iterator为集合而生,是java语言解决遍历集合的一个工具。它提供一种方法访问集合中各个元素,而不暴露该集合的内部实现细节。
Collection接口的Iterator()方法返回一个Iterator对象,通过Iterator接口的两个方法即可实现对集合元素的遍历。下面列举了Iterator接口的三个方法。
- boolean hasNext()
判断是否存在下一个可访问的数据元素。
- Object next()
返回要访问的下一个数据元素。
- void remove()
从迭代器指向的Collection集合中移除迭代器返回的最后一个数据元素。
2.Iterator的使用
接下来通过“租车系统”讲解集合中Iterator的使用。
代码如下:
public class Theme{
//属性
int id=0;
String title;
String remark;
//构造器
public Theme(int id,String title,String remark){
this.id=id;
this.title=title;
this.remark=remark;
}
//get和set方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
使用Iterator遍历:
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Test{
public static void main(String[] args) {
//存储数据的地址
Set set = new HashSet<>();
//存储数据
set.add(new Theme(1,"标题1","简介1"));
set.add(new Theme(2,"标题2","简介1"));
//遍历数据
Iterator iter = set.iterator();
while(iter.hasNext()){
Theme theme = (Theme)iter.next();
System.out.println(theme.getId()+theme.getTitle()+theme.getRemark());
}
}
}
输出结果:
3.增强for循环
从JDK1.5开始,提供了另一种形式的for循环,这就是增强for循环,或称为foreach循环。借助增强for循环可以用更简单的方式来遍历数组和Collection集合中的对象。
下面是用增强for循环与传统for循环做个比较。
举一个非常简单的案例,一个数组或者集合里存放了四个学生的姓名字符串,分别用传统for循环和增强for循环,逐个显示学生姓名。
例如:
import java.util.*;
public class TestResult{
public static void main(String[] args){
String[] stuArr={"王云","刘静涛","南天华","雷静"};
System.out.println("===========传统for循环===========");
//传统for循环遍历
for(int i=0;i<stuArr.length;i++){
System.out.println(stuArr[i]);
}
System.out.println("==========增强for循环============");
//增强for循环遍历
for(String str:stuArr){
System.out.println(str);
}
Set nameSet=new HashSet();
nameSet.add("王云");
nameSet.add("刘静涛");
nameSet.add("南天华");
nameSet.add("雷静");
System.out.println("===========迭代器遍历===========");
//迭代器遍历
Iterator it=nameSet.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
System.out.println("===========增强for循环===========");
//增强for循环遍历
for(Object o:nameSet){
System.out.println((String)o);
}
}
}
输出结果是:
可以看出JDK1.5的增强for循环使得代码短小精悍,在遍历数组和集合的时候更加方便。
但增强for循环在使用时,也有下面一些局限性,使用时需注意:
- 在用传统for循环处理数组时,可以通过数组下标进行一些程序控制,例如可以通过数组下标每次循环之后加2的方式,间隔输出数组中的元素。而增强for循环不能获得下标位置,类似的功能需要用其他方式实现。
- 如果使用增强for循环操作集合,无法实现对集合元素的删除,还需要调用Iterator迭代器的remove()方法才能完成。