迭代器 Iterator及其子类ListItarator

 ---------------迭代器 Iterator----------------
 任何容器类,都必须有某种方式可以插入元素并将它们再次返回。毕竟,持有事物是容器最基本的工作。

 对于List可以有add()方法来完成插入元素的操作,get()方法来完成获取元素的操作。


 如果从更高的角度思考,会发现这里有个缺点:要使用容器,就必须对容器的确切类型编程。

 现在思考两个问题:
 1、如果原本是对List编码的,但是后来如果要将相同的代码很方便的移植到Set,此时应该怎么做?
 2、如果打算从头开始编写通用的代码,它们只是使用容器,但是不关心容器的具体类型,那么要如何才能做到不重         写代码就能够应用于不同类型的容器呢?
迭代器的概念就能够达到此目的。


Java的Iterator只能够单向移动,从而这个Iterator只能够用来做以下的事情:

1)使用iterator()方法要求容器返回一个Iterator。Iterator将准备好返回序列的第一个元素。
2)使用next()获取序列的下一个元素。
3)使用hasNext()来检测序列中是否还有元素。
4)使用remove()将迭代器新近返回的元素删除。

------------------ListItarator---------------
ListIterator是一个更加强大的Iterator的子类型 它只能用于List类的访问
尽管Iterator只能够向前移动,但是ListItarator可以双向移动。
可用的方法:
1)使用hasNext()来检测序列中是否还有元素。
2)使用next()获取序列的下一个元素。
3)使用hasPrevious()来检测序列中是否有上一个元素。
4)使用previous()获取序列的上一个元素。
5)set()方法替换它访问过的最后一个元素。
6)listIterator()方法产生一个指向List开始处的ListIterator。

7)listIterator(n)方法产生一个指向列表索引为n的元素处的ListIterator。


package com.lj95801.jihelei;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

import org.junit.Test;

/*
 * ---------------迭代器 Iterator----------------
 * 任何容器类,都必须有某种方式可以插入元素并将它们再次返回。毕竟,持有事物是容器最基本的工作。
 * 对于List可以有add()方法来完成插入元素的操作,get()方法来完成获取元素的操作。
 * 如果从更高的角度思考,会发现这里有个缺点:要使用容器,就必须对容器的确切类型编程。
 * 
 * 现在思考两个问题:
 * 1、如果原本是对List编码的,但是后来如果要将相同的代码很方便的移植到Set,此时应该怎么做?
 * 2、如果打算从头开始编写通用的代码,它们只是使用容器,但是不关心容器的具体类型,那么要如何才能做到不重写代码就能够应用于不同类型的容器呢?
 * 迭代器的概念就能够达到此目的。
 * 
 * Java的Iterator只能够单向移动,从而这个Iterator只能够用来做以下的事情:
 * 1)使用iterator()方法要求容器返回一个Iterator。Iterator将准备好返回序列的第一个元素。
 * 2)使用next()获取序列的下一个元素。
 * 3)使用hasNext()来检测序列中是否还有元素。
 * 4)使用remove()将迭代器新近返回的元素删除。
 * 
 * ------------------ListItarator---------------
 * ListIterator是一个更加强大的Iterator的子类型,它只能用于List类的访问。
 * 尽管Iterator只能够向前移动,但是ListItarator可以双向移动。
 * 可用的方法:
 * 1)使用hasNext()来检测序列中是否还有元素。
 * 2)使用next()获取序列的下一个元素。
 * 3)使用hasPrevious()来检测序列中是否有上一个元素。
 * 4)使用previous()获取序列的上一个元素。
 * 5)set()方法替换它访问过的最后一个元素。
 * 6)listIterator()方法产生一个指向List开始处的ListIterator。
 * 7)listIterator(n)方法产生一个指向列表索引为n的元素处的ListIterator。
 */

public class test_Iterator_ListIterator {
	
	@Test
	public void test_Iterator() {
		//下面用三种方法来添加list链表
		List<Person> list = 
				new ArrayList<Person>(Arrays.asList(new Person("小明",23), new Person("李雷",24)));
		
		Person[] pers = {new Person("韩梅",21),new Person("露西",20)};
		list.addAll(Arrays.asList(pers));
		
		Person p = new Person("小花",30);
		list.add(p);
		
		//用Iterator来操作list,可以利用hasNext()和next()方法配合来遍历整个list链表
		Iterator<Person> it = list.iterator();//使用iterator()方法要求容器返回一个Iterator
		while(it.hasNext()){
			Person person = it.next();
			System.out.println(person);
		}
		
		System.out.println("------------->");
		//remove()方法
		it = list.iterator();	//让it指针回归,此时it指向所有元素的前面
		it.next();		//此时it指向第一个元素
		it.remove();	//删除it指向的那个元素,也就是第一个元素
		System.out.println(list);
	}
	
	
	@Test
	public void test_ListIterator(){
		List<Student> list = 
				new ArrayList<Student>(Arrays.asList(new Student("小明",23,97.5f), new Student("李雷",24,98)));
		list.add(new Student("小华",20,80.5f));
		list.add(new Student("小曼",24,80.5f));
		//指向索引值为1的Iterator,实际上指向的是索引值为0的元素。
		ListIterator<Student> lit = list.listIterator(1);
		while(lit.hasNext()){
			System.out.println(lit.next());
		}
		
		System.out.println("---------->");
		//访问过的最后一个元素是列表中的最后一个元素。现在将其修改为Lily。
		lit.set(new Student("Lily",19,70));
		
		while(lit.hasPrevious()){
			System.out.println(lit.previous());
		}
	}
}


测试单元的运行结果:

@Test
public void test_Iterator()



测试单元的运行结果:

@Test
public void test_ListIterator()




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值