学习任务:

视频学习

Iterator迭代器介绍

Iterator遍历测试

Iterator删除测试

Collection接口继承Iterable接口,其中有一个iterator()方法,如下所示:

image-20201010120445822

此方法返回一个迭代器,所有Collection接口的间接实现类都需要实现此方法。

Iterator迭代器有如下方法:

image-20201010122008916

1)next()方法

每调用一次next()方法得到集合中一个元素,直到集合中遍历完为止,如果已遍历完最后一个元素再次调用next()方法将报错。

2)hasNext()方法

hasNext()方法可以判断是否还有下一个元素。

3)remove()方法

当调用next()方法返回了一个元素,调用remove()方法将其从集合移除。

ArrayList类中定义的iterator方法如下:

image-20201010121106889

ArrayList的iterator方法返回一个Itr的内部类对象,Itr内部类实现了Iterator接口。

本测试将攀博课堂课程对象放入集合,所以首先定义一个课程类:

package com.pbteach.javase.oop.arraylist.test2;

/**
 * 	课程类
 * @author 攀博课堂(www.pbteach.com)
 *
 */
public class PbCourse {
	
	//课程标识
	private long id;
	//课程名称
	private String courseName;
	//课程价格
	private int price;
	
	public PbCourse() {
		
	}
	public PbCourse(long id, String courseName, int price) {
		this.id = id;
		this.courseName = courseName;
		this.price = price;
	}
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public String getCourseName() {
		return courseName;
	}
	public void setCourseName(String courseName) {
		this.courseName = courseName;
	}
	public float getPrice() {
		return price;
	}
	public void setPrice(int price) {
		this.price = price;
	}
	@Override
	public String toString() {
		return "PbCourse [id=" + id + ", courseName=" + courseName + ", price=" + price + "]";
	}
	
	

}

迭代器测试类

package com.pbteach.javase.oop.arraylist.test2;

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

/**
 * Iterator迭代器测试
 * @author 攀博课堂(www.pbteach.com)
 *
 */
public class IteratorTest1 {
	
	
	public static void main(String[] args) {
		
		//创建一个ArrayList集合
		List<PbCourse> list = new ArrayList<>();
		
		//添加元素
		list.add(new PbCourse(100L, "攀博课堂-Java面向对象教程", 33));
		list.add(new PbCourse(101L, "攀博课堂-Spring全家桶教程", 44));
		list.add(new PbCourse(102L, "攀博课堂-SpringCloud微服务教程", 55));
		list.add(new PbCourse(103L, "攀博课堂-在线教育分布式项目教程", 66));
		//遍历list
		querylist(list);
		
	}
	/**
	 * 使用iterator遍历每个元素
	 * @param list
	 */
	public static void querylist(List<PbCourse> list) {
		System.out.println("========开始遍历==========");
		//获取迭代器
		Iterator<PbCourse> iterator = list.iterator();
		//通过迭代器遍历
		while(iterator.hasNext()) {
			//取出下一个元素
			PbCourse course = iterator.next();
			System.out.println(course);
			
		}
	}

}

输出:

PbCourse [id=100, courseName=攀博课堂-Java面向对象教程, price=33]
PbCourse [id=101, courseName=攀博课堂-Spring全家桶教程, price=44]
PbCourse [id=102, courseName=攀博课堂-SpringCloud微服务教程, price=55]
PbCourse [id=103, courseName=攀博课堂-在线教育分布式项目教程, price=66]

使用remove方法对遍历到的元素执行删除操作,调过next()方法遍历得到一个元素,此时调用remove将从集合删除这个元素。

注意:如果没有调用next()方法,调用remove() 将报错。

代码如下:

package com.pbteach.javase.oop.arraylist.test2;

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

/**
 * Iterator迭代器测试
 * @author 攀博课堂(www.pbteach.com)
 *
 */
public class IteratorTest1 {
	
	
	public static void main(String[] args) {
		
		//创建一个ArrayList集合
		List<PbCourse> list = new ArrayList<>();
		
		//添加元素
		list.add(new PbCourse(100L, "攀博课堂-Java面向对象教程", 33));
		list.add(new PbCourse(101L, "攀博课堂-Spring全家桶教程", 44));
		list.add(new PbCourse(102L, "攀博课堂-SpringCloud微服务教程", 55));
		list.add(new PbCourse(103L, "攀博课堂-在线教育分布式项目教程", 66));
		//遍历list
		querylist(list);
		//删除第二个(下标为1)元素
		testremove(list,1);
		//遍历list
		querylist(list);
		
		
	}
	/**
	 * 	使用iterator删除某个元素
	 * @param list 集合
	 * @param index 元素下标
	 */
	public static void testremove(List<PbCourse> list,int index) {
		//获取迭代器
		Iterator<PbCourse> iterator = list.iterator();
		//通过迭代器遍历
		int i=0;
		while(iterator.hasNext()) {
			//取出下一个元素
			PbCourse course = iterator.next();
			
			//删除元素
			if(i == index) {
				iterator.remove();
				//必须调过next方法再调用remove,下边代码报错
				//iterator.remove();
			}
			//每读一个数加1
			i++;
			
		}
		
	}
	/**
	 * 使用iterator遍历每个元素
	 * @param list 集合
	 */
	public static void querylist(List<PbCourse> list) {
		System.out.println("========开始遍历==========");
		//获取迭代器
		Iterator<PbCourse> iterator = list.iterator();
		//通过迭代器遍历
		while(iterator.hasNext()) {
			//取出下一个元素
			PbCourse course = iterator.next();
			System.out.println(course);
			
		}
	}

}

提问-攀博课堂
我要提问 不会就问,有效沟通
关注公众号,加入微信群交流提问。 攀博课堂官方公众号
问答列表,查看本知识点所有问题