- public class Test1 {
- public static void main(String[] args) {
- method2();
- }
- public static void method2() {
- List l = new ArrayList();
- l.add("a");
- l.add("b");
- l.add("c");
- //这个时候,l里的顺序是这样的[a,b,c]
- ListIterator lt = l.listIterator();
- while (lt.hasNext()) {
- //这个obj会得到a(第一次),b(第二次),d(第三次),c(第四次)
- Object obj = lt.next();
- //循环只有为b的时候才会进去,所以也就是第2次会进去
- if (obj.equals("b")) {
- lt.add("d");
- //加完d以后,l里的顺序是这样的[a,b,d,c],因为add昨晚以后,it会把指针指向3的位置,也就是c的位置。
- lt.hasPrevious();
- //因为previous的影响,指针指向前一位的值,即2位置上的d
- Object obj1 = lt.previous();
- //输出obj1,即d(这个输出语句整个程序运行期间只会输出一次)
- System.out.println(obj1);
-
- }
- //这个依次输出a/b/d/c
- System.out.println(obj);
- }
- }
- }
复制代码 总结下:
ListIterator对象在做正续遍历的时候,每次取完值以后,指针会加1指向下个元素,但是执行previous时,指针去取出当前指针的前一个数,取完后并不会继续-1以便指向更前的数。
所以插入d以后,previous的结果是取出d,但是指针指向的还是d,而不是之前的b。
|