详解JAVA中ListIterator和Iterator的辨析
在使用java集合的时候,都需要使用iterator。但是java集合中还有一个迭代器listiterator,在使用list、arraylist、linkedlist和vector的时候可以使用。这两种迭代器有什么区别呢?下面我们详细分析。这里有一点需要明确的时候,迭代器指向的位置是元素之前的位置,如下图所示:
这里假设集合list由四个元素list1、list2、list3和list4组成,当使用语句iterator it = list.iterator()时,迭代器it指向的位置是上图中iterator1指向的位置,当执行语句it.next()之后,迭代器指向的位置后移到上图iterator2所指向的位置。
首先看一下iterator和listiterator迭代器的方法有哪些。
iterator迭代器包含的方法有:
-
hasnext()
:如果迭代器指向位置后面还有元素,则返回 true,否则返回false -
next()
:返回集合中iterator指向位置后面的元素 -
remove()
:删除集合中iterator指向位置后面的元素
listiterator迭代器包含的方法有:
-
add(e e)
: 将指定的元素插入列表,插入位置为迭代器当前位置之前 -
hasnext()
:以正向遍历列表时,如果列表迭代器后面还有元素,则返回 true,否则返回false -
hasprevious()
:如果以逆向遍历列表,列表迭代器前面还有元素,则返回 true,否则返回false -
next()
:返回列表中listiterator指向位置后面的元素 -
nextindex()
:返回列表中listiterator所需位置后面元素的索引 -
previous()
:返回列表中listiterator指向位置前面的元素 -
previousindex()
:返回列表中listiterator所需位置前面元素的索引 -
remove()
:从列表中删除next()或previous()返回的最后一个元素(有点拗口,意思就是对迭代器使用hasnext()方法时,删除listiterator指向位置后面的元素;当对迭代器使用hasprevious()方法时,删除listiterator指向位置前面的元素) -
set(e e)
:从列表中将next()或previous()返回的最后一个元素返回的最后一个元素更改为指定元素e
一.相同点
都是迭代器,当需要对集合中元素进行遍历不需要干涉其遍历过程时,这两种迭代器都可以使用。
二.不同点
1.使用范围不同,iterator可以应用于所有的集合,set、list和map和这些集合的子类型。而listiterator只能用于list及其子类型。
2.listiterator
有add方法,可以向list中添加对象,而iterator不能。
3.listiterator
和iterator
都有hasnext()
和next()
方法,可以实现顺序向后遍历,但是listiterator有hasprevious()和previous()方法,可以实现逆向(顺序向前)遍历。iterator不可以。
4.listiterator可以定位当前索引的位置,nextindex()
和previousindex()
可以实现。iterator没有此功能。
5.都可实现删除操作,但是listiterator可以实现对象的修改,set()方法可以实现。iterator仅能遍历,不能修改。
三:iterator和listiterator用法示例
listiterator用法:
package com.collection; import java.util.linkedlist; import java.util.list; import java.util.listiterator; /** * @author 朱伟 * 链表中listiterator测试 * */ public class listiteratortest { public static void main(string[] args) { // todo auto-generated method stub list<string> staff = new linkedlist<>(); staff.add("zhuwei"); staff.add("xuezhangbin"); staff.add("taozhiwei"); listiterator<string> iter = staff.listiterator(); string first = iter.next(); //删除zhuwei iter.remove(); //把zhuwei改为simei //iter.set("simei"); system.out.println("first:"+first); iter.add("xiaobai"); //遍历list元素 system.out.println("遍历list中元素,方法一:"); for(string str : staff) system.out.println(str+" "); iter = staff.listiterator(); system.out.println("遍历list中元素,方法二:"); while(iter.hasnext()) { system.out.println(iter.next()); } } }
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!