java里的迭代器

对于一组数据而言,数据存储的形式有很多种,按照一般的思维而言,不同的数据存储形式有不同的读取的方法,但是在实际应用当中,我们使用数据的方式如果有很多种,就会造成灾难,因此,需要一个统一的方式对数据进行处理,提供统一的接口个使用者去使用,这就是迭代器模式
什么是迭代器——其实就是不管是什么容器(存储数据的方式)提供统一的下一个元素,然后告诉你所有的元素是否都被访问过~
然后我们来看一下封装的类

package cn.csdn.iterator;
/**
 * 迭代模式的实现
 */
import java.util.Iterator;

public class IteratorTest implements Iterable<String>{

	public String[] str;
	public static int i=0;
	//这是一个构造方法,用来初始化数据
	public IteratorTest(String[] str) {
		this.str=str;
	}
	
	//这个是实现接口
	public Iterator<String> iterator() {
		//这里通过匿名内部类的形式返回一个迭代器,所以要new一个迭代器
		return new Iterator<String>(){
			//这是判断是否还有下一个元素
			public boolean hasNext() {
				return i<str.length;
			}

			//这是找到下一个元素
			public String next() {
				return str[i++];
			}
			
		};
	}

}

然后看一下使用者的代码

package cn.csdn.iterator;

import java.util.Iterator;

public class Test {
	
	public static void main(String[] args) {
		//这是一个String类型的数组
		String[] str;
		//String 类型转化
		String s="it is a code .";
		str=s.split(" ");
		
		IteratorTest myMsg=new IteratorTest(str);
		Iterator<String> iterator=myMsg.iterator();
		while(iterator.hasNext()) {
			String nextDate=iterator.next();
			System.out.println(nextDate);
		}
		
		System.out.println("++++++++++++++++++++++");
		//这里对比一下传统模式
		for (int i = 0; i < str.length; i++) {
			System.out.println(str[i]);
		}
		
	}
	
	
}

这里说明一下
E---->泛型
在这里插入图片描述原因说明:
Iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素,为了能更好地理解迭代器的工作原理,接下来通过一个图例来演示Iterator对象迭代元素的过程,如下图所示
在这里插入图片描述图中,在调用Iterator的next()方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next()方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next()方法时,迭代器的索引会指向第二个元素并将该元素返回,依此类推,直到hasNext()方法返回false,表示到达了集合的末尾,终止对元素的遍历。
需要特别说明的是,当通过迭代器获取ArrayList集合中的元素时,都会将这些元素当做Object类型来看待,如果想得到特定类型的元素,则需要进行强制类型转换。

加强for循环遍历元素
虽然Iterator可以用来遍历集合中的元素,但写法上比较繁琐,为了简化书写,从JDK5.0开始,提供了foreach循环。foreach循环是一种更加简洁的for循环,也称增强for循环。foreach循环用于遍历数组或集合中的元素,其具体语法格式如下
for(容器中元素类型 临时变量:容器变量 ){
执行语句
}

package cn.csdn.listdemo;

import java.util.ArrayList;

public class ForeachDemo {
	public static void main(String[] args) {
		//获取对象
		ArrayList<String> list=new ArrayList<String>();
		//增加元素
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		
		//用增强for循环来遍历元素
		/**
		 * 增强for循环其实就是应用了迭代器原理来的,格式如下:
		 * for (容器元素类型+变量 : 容器变量) {
			执行语句
		}
		 */
		for (String string : list) {
			System.out.println(string);
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值