结合API文档学习:常用 hasNext() 和 next()方法 。
其实还有一种List特有的获取迭代器 的 方法 : ListIterator 。
ListIterator 包括 : (1)add()方法:给List集合添加元素,不出现并行修改异常。
(2)hasNext()方法 : 检验后面还有没有元素。 从前往后查找。
(3)next()方法 :获取下一个元素 。
(4)hasPrevious()方法 :检验前一个是否有元素。从后往前查找。
(5)previous()方法 : 获取前一个元素 。
ListIterator主要使用 :add(),hasNext(),next()。
因为 使用 hasPrevious()方法和previous()这两种方法的使用前提是 必须是在进行完 正向迭代 ,也就是 使用完 hasNext 和next 才能使用 hasPrevious 和 previous 。从开始迭代到最后(next和hasPrevious),然后再从最后迭代到开始(previous和hasPrevious)。开发中 从后往前的迭代意义不大。
范例代码如下:
import java.util.ArrayList;
import java.util.Collection;Student st = (Student)it1.next();
//存在集合中的元素类型为 Object 类对象 ,变成Student类对象,才能调用Student类中的 getName() 和 getAge()方法。Object类 为 Student类的 父类 , 父类不能直接调用子类中的方法 。
//it1.next() 迭代出的元素 与 c1集合中存储的 元素 是一样的。所以将 it1.next()强制转换成 存入 集合之前的 类型 Student 。使用getName 和 getAge 输出的方式: (其中涉及 强制类型转换)
张三...20}
没看源码的理解:next()和 hasNext()是相关联的, 一个计数器 number , 用一次 next() number就++,然后hasNext()中 在 比较 number和size(集合长度)的大小。(看源码,方法Itr中重写的 next,hasNext,remove三个方法)
看完源码之后的理解:hasNext()方法底层有一个couse的变量,它是用来记录位置的,调用一次next(),couse就自增1,然后couse与size比较,如果小于size就说明有元素。
* 注意:打印引用数据类型(对象),系统默认调用了toString()方法 。 在escplice中用 Ctril+1 点击println()方法,进去之后,Ctril+1 点击 valueOf。
源码如下:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();