JavaSE入门学习38:Java集合框架之迭代器

时间:2022-12-26 23:43:41

        一Iterator接口

  迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层

结构。迭代器通常被称为"轻量级"对象,因为创建它的代价小。

      Java中的迭代器(Iterator)给我们提供了一种通用的方式来访问集合中的元素。可以知道的是,它只是提供了一个

接口,并没有提供真正的Iterator类。Iterator是对collection进行迭代的迭代器。

       Iterator接口定义了如下的方法:

JavaSE入门学习38:Java集合框架之迭代器

  Java中的Iterator功能比较简单,并且只能单向移动:

  (1)使用方法iterator()要求容器返回一个Iterator对象。第一次调用Iterator的next()方法时,它返回序列的第一个元

素。

  (2)使用next()获得序列中的下一个元素。

  (3)使用hasNext()检查序列中是否还有元素,如果仍有元素可以迭代,则返回 true。

  (4)使用remove()将迭代器新返回的元素删除。该方法是在迭代过程中删除元素的唯一的安全方法。

       二Iterable接口

       Java中还提供了一个Iterable接口,Iterable接口实现后的功能是"返回"一个迭代器,该接口的iterator()方法返回一

个标准的Iterator实现。实现这个接口允许对象成为foreach语句的目标。就可以通过foreach语法遍历你的底层序列。

       Iterable接口包含一个能够产生Iterator的iterator()方法,并且Iterable接口被foreach用来在序列中移动。因此如果

创建了任何实现Iterable接口的类,都可以将它用于foreach语句中。

       Iterable接口中定义唯一的方法:

JavaSE入门学习38:Java集合框架之迭代器

       所有实现了Collection接口的集合类型都有一个iterator()方法用以返回一个实现了Iterator接口的对象。Iterator对象

称作迭代器,用以方便的实现对象容器内元素的遍历操作。

      三示例

      就像上面所说的,在Java的Iterator借口中定义了三个方法:hasNext()如果仍有元素可以迭代,则返回true;next()

返回迭代的下一个元素;remove()从迭代器指向的collection 中移除迭代器返回的最后一个元素。

    我们可以认为迭代器Iterator是指向两个元素之间的位置,我们可以使用hasNext()来判断当前位置后面是否还有元

素。使用next()方法返回后面的元素,并且将位置移动到下一个元素前的位置。对于remove()方法我们删除的是当前

位置前面的元素,所以我们在调用remove()方法之前必须先调用至少一次next()方法。这里所说的迭代器的位置在被

迭代的对象中并不存在的,只是我们为了准确的说明这个方法,而假想出来的。

      我们可以使用三种循环体遍历Java集合中的元素:

      (1)使用while循环遍历

      实例:

import java.util.*;

public class Test{
public static void main(String[] args){
List list = new ArrayList();
list.add("aa");
list.add("bb");
list.add("cc");

//使用while循环遍历集合中的元素
//使用集合的iterator()返回一个Iterator对象
Iterator iter = list.iterator();
//使用hasNext()方法判断是否有下一个元素
while(iter.hasNext()){
//使用next()方法返回元素
String str = (String)iter.next();
System.out.println(str);
}
}
}

      运行结果:

JavaSE入门学习38:Java集合框架之迭代器

      (2)使用for循环遍历

      实例:

import java.util.*;

public class Test{
public static void main(String[] args){
List list = new ArrayList();
list.add("one");
list.add("two");
list.add("three");

//使用for循环遍历集合中的元素
for(Iterator iter = list.iterator(); iter.hasNext();){
String str = (String)iter.next();
System.out.println(str);
}
}
}

      运行结果:

JavaSE入门学习38:Java集合框架之迭代器

       (3)使用foreach语句遍历

       所谓的foreach语句指的是jdk 5.0新增的的一个循环结构,可以用来处理集合中的每个元素而不用考虑集合定下

标。foreach语句对于遍历array或Collection的时候相当简便。可以看到的是,我们在前面的学习的过程过程中遍历集

合中的元素对象都是使用的这种方式。

       格式如下: 

for(variable:collection){ 
statement;
}

       实例:

import java.util.*;

public class Test{
public static void main(String[] args){
//定义的数组
int[] arr = {1,2,3,4,5};
for(int i : arr){
System.out.println(i);
}

System.out.println("-----------------");
//定义的集合
List l = new ArrayList();
l.add(new String("aaa"));
l.add(new String("bbb"));
l.add(new String("ccc"));
for(Object o : l){
System.out.println(o);
}
}
}

      运行结果:

JavaSE入门学习38:Java集合框架之迭代器

       当然使用foreach循环结构也有缺陷:如果遍历数组会很不方便的访问到下标值:如果遍历集合那么与与使用

Iterator相比,不能方便的删除集合中的内容。除了简单遍历并读出其中的内容外,不建议使用foreach循环结构。

       在网上查询资料的时候看了好多关于Java迭代器的使用文章,看到了一篇很详细的文章,地址是Java迭代器

(转)(iterator详解以及和for循环的区别) 写的还不错。我们学习的时候最主要的就是借助于Java API。因此经常查

API,学会使用API,我们编写程序的代码会更上一层楼。