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

一Iterator接口

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

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

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

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

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

  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接口中定义唯一的方法:

所有实现了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);
                }
	}
}

运行结果:

(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);
                }
	}
}

运行结果:

(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);
		}
	}
}

运行结果:

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

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

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

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

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

时间: 2024-10-07 13:53:39

JavaSE入门学习38:Java集合框架之迭代器的相关文章

java集合框架初探-迭代器

package com.runoob.test; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class IteratorDemo { public static void main(String[] args) { //创建集合 Collection c1=new ArrayList(); c1.add("abc1"); c1.add("

JavaSE入门学习40:Java集合框架之泛型

一Java泛型 JDK 4.0以前装入集合的类型不明确,也就是说集合中的元素,可以是任意类型的对象(对象的引用),如果把某个 对象放入集合,则会忽略它的类型,而把它当做Object处理,从而失去自己的实际类型.从集合中取出时往往需要转 型,效率低,容易产生错误.JDK 5.0泛型指的是规定了某个集合只可以存放特定类型的对象,会在编译期间进行类 型检查,也可以直接按指定类型获取集合元素. 如果我们只写一个排序方法,就能够对整型数组.字符串数组甚至支持排序的任何类型的数组进行排序,这该多 好啊.Ja

JavaSE入门学习33:Java集合框架概述

一集合框架 (1)集合的概念 现实生活中的集合:很多的事物凑在一起. 数学中的集合:具有共同属性的事物的总体. Java中的集合类:是一种工具类,就像是容器,储存任意数量的具有共同属性的对象. (2)集合框架的概念 有了集合的概念,什么是集合框架呢?集合框架是为表示和操作集合而规定的一种统一的标准的体系结构.任何 集合框架都包含三大块内容:对外的接口.接口的实现和对集合运算的算法. 1接口:即表示集合的抽象数据类型.接口提供了让我们对集合中所表示的内容进行单独操作的可能.接口允许 集合独立操纵其

Java集合框架学习笔记

本文为学习笔记,学习课程为慕课网Java入门第三季中的集合框架部分,若需要研究文中的代码,可前往下载.http://www.imooc.com/learn/110 1. List(Collection子接口) 1.1 实例化 List list = new ArrayList(); ??List是一个接口,不可直接实例化,通常情况下ArrayList实现类进行实例化. 1.2 增 1.2.1 add(obj) ??直接将obj对象加入List末位. 1.2.2 add(i, obj) ??将ob

JavaSE入门学习21:Java面向对象之接口(interface)(二)

一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.java源文件代码: public class Test{ public static void main(String[] args){ //实现接口Singer Singer s1 = new Student("Amy"); s1.sing(); s1.sleep(); s1.study

JavaSE入门学习24:Java面向对象补充

一Java中的Object类 Object类是所有Java类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认 继承Object类. public class Person{ // } //等价于 public class Person extends Object{ // } Object类中的方法,适合所有子类. 1)toString()方法 在Object类中定义有public String toString()方法,其返回值是String类型,描述当前对

黑马程序员——JAVA集合框架学习总结

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- www.itheima.com 要学好java的集合框架,必须掌握此图: Java集合框架很全面,从大的来说.它包括两种类型: 1.一种是以collection为根接口的集合. 2.另一种是由map为根接口的<key,value>的“图”. 而collection之下的set接口和list接口又有不同: 1.Set 接口继承 Collection,但不允许重复,使用自己内部的一个排列机制.

JavaSE入门学习7:Java基础语法之语句(下)

继续接着Java基础语法来:JavaSE入门学习5:Java基础语法(一)和JavaSE入门学习6:Java基础语法(二). 语句 Java经常使用的3种循环:while.do...while,for. (5)Java循环语句之while 语法: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 运行

黑马程序员------Java集合框架学习总结

Java培训.Android培训.iOS培训..Net培训.期待您的交流 一.综述 所有集合类都位于java.util包下.集合中只能保存对象(保存对象的引用变量).(数组既可以保存基本类型的数据也可以保存对象). Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些接口或实现类. 二.Collection接口 Collction: List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引.