ListIterator列表迭代器

源码分析:

public interface List<E>{

Iterator<E> iterator();
ListIterator<E> listIterator();
boolean add(E e);
}
public abstract class AbstractList<E>{
int modCount = 0;
}

//ArrayList继承了一个类实现了一个接口
public class ArrayList<E> extends AbstractList<E> implements List<E>{

    public boolean add(E e) {
            ensureCapacityInternal(size + 1);  // Increments modCount!!
            elementData[size++] = e;
            return true;
        }


         public Iterator<E> iterator() {
            return new Itr();
           }

       private class Itr implements Iterator<E> {

       }

    }
    public ListIterator<E> listIterator() {
            return new ListItr(0);
        }


         private class ListItr extends Itr implements ListIterator<E> {
                ListItr(int index) {
                    super();
                    cursor = index;
                }

                public boolean hasPrevious() {
                    return cursor != 0;
                }

                public int nextIndex() {
                    return cursor;
                }

                public int previousIndex() {
                    return cursor - 1;
                }

                @SuppressWarnings("unchecked")
                public E previous() {
                    checkForComodification();
                    int i = cursor - 1;
                    if (i < 0)
                        throw new NoSuchElementException();
                    Object[] elementData = ArrayList.this.elementData;
                    if (i >= elementData.length)
                        throw new ConcurrentModificationException();
                    cursor = i;
                    return (E) elementData[lastRet = i];
                }

                public void set(E e) {
                    if (lastRet < 0)
                        throw new IllegalStateException();
                    checkForComodification();

                    try {
                        ArrayList.this.set(lastRet, e);
                    } catch (IndexOutOfBoundsException ex) {
                        throw new ConcurrentModificationException();
                    }
                }

                public void add(E e) {
                    checkForComodification();

                    try {
                        int i = cursor;
                        ArrayList.this.add(i, e);
                        cursor = i + 1;
                        lastRet = -1;
                        expectedModCount = modCount; //把实际的修改值赋值给预期的修改值
                    } catch (IndexOutOfBoundsException ex) {
                        throw new ConcurrentModificationException();
                    }
                }
            }

实现一下:

package com.it04;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class ListDemo {
    public static void main(String[] args) {

        List<String> list = new ArrayList<>();

        list.add("hello");
        list.add("world");
        list.add("java");


        //通过list集合的listIterator()方法得到
        //列表迭代器
        ListIterator<String> lit = list.listIterator();
        //正向遍历
        while (lit.hasNext()){
            String s = lit.next();
            System.out.println(s);
        }

        System.out.println("====================");
        //反向遍历
        while (lit.hasPrevious()){
            String s = lit.previous();
            System.out.println(s);
        }



        //获取列表迭代器方法遍历
     //   ListIterator<String> lit = list.listIterator();
        while (lit.hasNext()){
            String s = lit.next();
            if (s.equals("world")){
           //用的是ListIterator 的list来用添加方法*****
                lit.add("憨憨");
            }
        }
        System.out.println(list);


    }
}

     //用的是ListIterator 的list来用添加方法***** 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值