Java笔记(10)-ArrayList类中的迭代器

以下迭代器只是以ArrayList中重写的为例;由于是学习笔记,对我而言有两个用途:一则帮助他人填充基础,二则是希望 若我笔记有误,有人能加以指正,不至于误入歧途;

1. 迭代器简介

  • 所有实现了Collection的容器类都会有一个iterator方法 ,用来返回一个实现了Iterator接口的对象;
    以ArrayList为例:以下是它的迭代器;
 public Iterator<E> iterator() {
  return new Itr();//这个就是那个返回,实现了Iterator接口的类对象;
}

//一个内部类,实现了Iterator接口;
 private class Itr implements Iterator<E> {
 //一个游标一样,开始指向-1,就是不存在;
        int cursor;       // index of next element to return
        int lastRet = -1; // index of last element returned; -1 if no such
        int expectedModCount = modCount;

        Itr() {}

//一个判断是否继续循环的方法;
        public boolean hasNext() {
            return cursor != size;//如果元素的数量等于游标的值,则返回false,否则是true;
        }

        @SuppressWarnings("unchecked")
        public E next() {
            checkForComodification();
            int i = cursor;
            if (i >= size)//如果cursor的值大于元素的数量,就可以抛出异常;一般就结束了;
                throw new NoSuchElementException();
            //将动态数组中的值赋值给一个Object数组;
            Object[] elementData = ArrayList.this.elementData;
            if (i >= elementData.length)
                throw new ConcurrentModificationException();
            //每取值一次就使得游标cursor加一;
            cursor = i + 1;
            return (E) elementData[lastRet = i];
        }

2. 使用一张简单图片表示迭代器对数据提取;

  1. hasNext():该方法主要用于进行一个判断,在cursor的值是否大于动态数组中已有的元素数量;
  2. next():该方法主要用于提取动态数组中的值;
  3. remove():该方法主要用于删除元素,但是它删除的是已经遍历过的元素;
public class TestIterator {
   
   public static void main(String[] args) {
   	List<String> arr = new ArrayList<String>();//定义一个ArrayList动态数组
   	arr.add("dxs");
   	arr.add("神秘的天");
   	arr.add("一言躺");
   	
   	Iterator<String> ite=arr.iterator();//定义一个迭代器;
   	while(ite.hasNext()) {//进行判断,是否游标后面还有元素;
   		System.out.println(ite.next());//输出迭代得到的元素;
   	}
   	for(;ite.hasNext();) {
   		System.out.println(ite.next());
   	}
   }
}

以上基本就是迭代器的基本使用方法;

猜你喜欢

转载自blog.csdn.net/dxsdcyy/article/details/105346043