黑马程序员技术交流社区
标题:
关于ListIterator的反向迭代功能。。。
[打印本页]
作者:
张旺达
时间:
2013-4-23 10:17
标题:
关于ListIterator的反向迭代功能。。。
本帖最后由 张旺达 于 2013-4-23 13:23 编辑
import java.util.*;
public class ListIteratorTest
{
public static void main(String[] args)
{
String[] books = {"AAAAA","BBBBB"};
List bookList = new ArrayList();
for (int i=0; i<books.length; i++)
{
bookList.add(books[i]);
}
ListIterator lit = bookList.listIterator();
while(lit.hasNext())
{
System.out.println(lit.next());
lit.add("-------分隔符-------");
}
System.out.println("=======下面开始反向迭代=======");
while(lit.hasPrevious())
{
System.out.println(lit.previous());
}
}
}
复制代码
输出结果是:
AAAAA
BBBBB
=======下面开始反向迭代=======
--------分隔符--------
BBBBB
--------分隔符--------
AAAAA
请帮我读一下此程序,顺序有点看不明白啊。。。
作者:
薛淑凯
时间:
2013-4-23 12:10
本帖最后由 薛淑凯 于 2013-4-23 12:13 编辑
API文档关于ListIterator的add()方法的说明
将指定的元素插入列表(可选操作)。该元素直接插入到 next 返回的下一个元素的前面(如果有),或者 previous 返回的下一个元素之后(如果有);
while(lit.hasNext())
{
System.out.println(lit.next());
lit.add("-------分隔符-------");
}
lit里是 AAAAA
BBBBB
每次添加到next()返回元素前边 AAAAA
-------分隔符-------
BBBBB
-------分隔符-------
反向打印也就是你的结果了
作者:
郭登旭
时间:
2013-4-23 12:34
以前没有注意到这个细节,开始我还以为程序写错了,在这也学习了。说一下我的理解。
这个问题关键点在这
while(lit.hasNext()) //判断集合不为空
{
System.out.println(lit.next()); //指针指向AAAAA,正向输出第一个元素AAAAA ;
//第二次循环输出BBBBB
lit.add("-------分隔符-------"); //然后在当前指针位置向集合添加"-------分隔符-------",即AAAAA的后面 ;
//第二次循环在BBBBB的后面添加"-------分隔符-------"
}
List的底层是用可变数组实现的,当用集合产生ListIterator迭代器遍历集合时,迭代器要遍历的对象就是当前集合,集合是用数组实现的,这个数组长度是固定的,即该集合是不会变的,可以认为处于锁定状态。虽然遍历过程中可以对数组进行增删改的操作,但这个集合就用另一个数组实现的,对于迭代器来说,下次遍历,要遍历的对象才是用这个新数组实现的集合。
所以第一次遍历按原集合输出,第二次遍历输出修改后的集合元素,只不过是反序输出。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2