iterator和listiterator的作用范围以及关系:
(1) iterator可以用于迭接口list的实现arraylist,linkedlist以及map等。
(2) listiterator顾名思义,就是用于迭代list实现arraylist,linkedlist。
(3) 从源码或api文档中可以看出,iterator为listiterator的父类。
1
2
3
|
public interface listiterator<e> extends iterator<e> { // 省略...... } |
在listiterator中增加了新方法。
迭代器隐式游标位置实例分析:
如上图,在迭代器要迭代的集合list中有四个元素a,b,c,d,当调用xxx.iterator()或xxx.listiterator()方法时,
迭代器指向iterator_one的位置,当调用xxx.next()方法时,迭代器位置指向iterator_two位置。
迭代器指向的位置并不是正对着元素,而是在元素之间。
iterator和listiterator中的方法:
------iterator中的方法:
官方api方法概要:
方法分析:
hasnext():判断集合中元素迭代器所指下一个位置是否有元素,有返回true,否则返回false
next():返回迭代器所指向位置下一个元素值。
remove():删除迭代器通过iterator取出的值。
------listiterator中的方法:
官方api方法概要:
方法分析:
add(ee):在集合中插入指定元素,插入位置与最后一次操作next()或previous()方法有关。
如果最后操作的是next(),则在该next取出的元素之后插入元素,如果是previous()则在取出的元素之前插入元素。
hasnext():集合正序遍历时,判断隐式游标所指的下一个元素是否存在,存在返回true,否则返回false。
hasprevious():集合反向遍历时,判断隐式游标的上一个元素是否存在,存在返回true,否则返回false。
next():返回隐式游标所指位置下一个元素值。
nextindex():返回隐式游标所指位置下一个元素的索引值。
previous():返回隐式游标所指位置的上一个元素值。
previousindex():返回隐式游标所指上一个位置元素的索引值。
remove():从集合中删除元素,并不是删除所有的元素,而是删除最后一次操作next()或previous()返回的元素,
如果next()或previous()没有返回值,则报错。
set(ee):从列表中将next()或previous()返回的元素替换为e,比如,next()取出为a,可以通过set将a替换为one。
实例1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
package com.lanhuigu.java; import java.util.arraylist; import java.util.list; import java.util.listiterator; public class listiteratorapitest { public static void main(string[] args) { list<string> list = new arraylist<string>(); list.add( "a" ); list.add( "b" ); list.add( "c" ); list.add( "d" ); // 此时,迭代器指向iterator_one位置 listiterator<string> listiterator = list.listiterator(); // 此时,迭代器指向iterator_two位置 string firstelement = listiterator.next(); // 删除元素 listiterator.remove(); // 删除next取出的元素,此时已经将a从集合中删除 // 添加元素 //listiterator.previous(); listiterator.add( "e" ); // 在指向位置iterator_two之前,即为之前a的位置 // 打印next取出的元素 system.out.println( "firstelement:" + firstelement); // 将指向位置重新初始化到iterator_one位置,但是a已经别删除,添加了e listiterator = list.listiterator(); while (listiterator.hasnext()) { system.out.println(listiterator.next()); } system.out.println( "--------------" ); // set 方法测试 listiterator = list.listiterator(); // 将e替换为eeee system.out.println( "dddd" +listiterator.next()); listiterator.set( "eeee" ); system.out.println( "---------------" ); // 将游标位置挪到首元素位置,打印元素,证明将e修改为eeee成功 listiterator = list.listiterator(); while (listiterator.hasnext()) { system.out.println(listiterator.next()); } } } |
实例二:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
package com.lanhuigu.java; import java.util.arraylist; import java.util.iterator; import java.util.list; import java.util.listiterator; public class iteratorapitest { public static void main(string[] args) { list<string> list = new arraylist<string>(); list.add( "a" ); list.add( "b" ); list.add( "c" ); list.add( "d" ); // 第一种遍历集合的方式,直接通过循环语句(for,do-while,while)遍历 // for for (string e : list) { system.out.println(e); } system.out.println( "------------" ); // 第二种遍历集合的方式(iterator) iterator<string> iterator = list.iterator(); while (iterator.hasnext()) { system.out.println(iterator.next()); } system.out.println( "------------" ); // 第三种遍历集合的方式(listiterator) listiterator<string> listiterator = list.listiterator(); while (listiterator.hasnext()) { system.out.println(listiterator.next()); } system.out.println( "------------" ); } } |
总结
以上就是本文关于java中iterator和listiterator实例详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
原文链接:http://blog.csdn.net/yhl_jxy/article/details/53394567