迭代器中遍历元素是用到的next()方法

本文介绍了如何在Java中创建和存储Person对象,并通过ArrayList集合实现,使用Iterator遍历,以及next()方法的工作原理和可能遇到的异常情况。
摘要由CSDN通过智能技术生成

题目要求

创建并存储  Person  对象,通过  ArrayList  集合实现,并使用迭代器遍历。

代码实现

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

public class MainTest {

	public static void main(String[] args) {
		List<Person> list = new ArrayList<Person>();
		
		Person p1 = new Person("小张",19);
		Person p2 = new Person("小王",20);
		Person p3 = new Person("小李",21);
		Person p4 = new Person("小红",18);
		
		list.add(p1);
		list.add(p2);
		list.add(p3);
		list.add(p4);
		
		Iterator<Person> iterator = list.iterator();
		
		while(iterator.hasNext()) {
			Person person0 = iterator.next();
			System.out.println(person0.getName()+" "+person0.getAge());
		}
	}

}

控制台输出

小张 19
小王 20
小李 21
小红 18

如果我再次调用  next()  方法,并输出里面的信息,会发生什么呢?我们将下面的两行代码添加到原程序的末尾,再运行一次看看结果是什么。

Person person1 = iterator.next();
System.out.println(person1.getName()+" "+person1.getAge());

添加代码后的输出

小张 19
小王 20
小李 21
小红 18
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.ArrayList$Itr.next(ArrayList.java:970)
at CSDNCode/nextFunction.MainTest.main(MainTest.java:29)

后面表示访问元素不存在

next()  方法解释

next()  方法的内部原理并非是指针,在java中没有没有指针的说法,这里只是为了理解更加方便, 从而用指针做相关的解释。

通过三步来理解完整过程

1.数据存入

2.迭代器封装
 使用迭代器就相当于把集合内的所有元素都封装起来到一个容器里了,并且这个容器不可被修改,只能被读取。

3.next()  遍历 

假设容器iterator是一个指针p,在程序开始时,这个指针p应该指向的位置是列表首地址的前一个地址

这里的iterator并不是指整个大的容器iterator,而是指我们在程序中定义的那个变量iterator,可以认为这是大容器中的一个内部指针

iterator  (即指针)  通过调用  hasnext()  方法,判断下一个地址是否存在元素

如果下一地址有元素,则  iterator  (即指针)通过调用  next()  方法,将该地址的元素值返回给定义的变量,调用  next()  方法后,指针p会自动移向下一元素的地址;当下一地址没有元素(一般以此作为遍历结束的标志),则不能调用  next()  方法,如果强行调用则会抛出异常(NoSuchElementException)

总结

关于  next()  方法的理解主要在于调用  next()  后,容器  iterator  (即比喻的那个p指针)发生的变化;每一次调用  next()  方法,都会做两部操作;

一、先把p指针的下一地址的元素返回;

二、再把p指针移动到下一位;

并且这两部操作同时进行!这个操作与C语言中文件读取函数的操作机器相类似!建议参照那个函数可以更好地理解这里的  next()  方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值