iterator和List的区别

  • Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。

  • Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。

  • ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。 

package zhengze;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

public class Demo {
    public static void main(String[] args)
    {
        ArrayList<String> a1 = new ArrayList<>(); //建立一个集合

        //添加元素
        a1.add("01");
        a1.add("02");
        a1.add("03");    //这些是元素的引用放到了集合当中,用集合填加这没什么问题


        //当我们来个a1.iterator()的时候,我们就把元素的引用防到了迭代器里面了.
        /* 现在能操作元素的方式有2种了,要么用集合的方式操作,要么用迭代器的方式操作
            这2种操作方式操作的是同一种元素,
            it.next();迭代器正在操作取出操作的过程中.你又用到了集合al.add操作方法操作
            就行成了同时病发,出现安全隐患.
            不同做的是: 对同一组元素进行多种同时操作.
        */

        //在迭代器过程中,准备添加或者删除元素
        Iterator it = a1.iterator();

        while (it.hasNext())
        {
            Object obj=it.next();  //我取到02,obj指向02,
            if(obj.equals("02"))    //判断条件满足
                //al.add(""02"");
                it.remove();  //这句话的意思是 遍历到不要让努力白废的时候,就把这句话的引用从集合中干掉. 但这个元素的引用还在内存当中,元素还在被obj使用


            sop("obj="+obj);  //打印元素都还在.
        }
        sop(a1);   //集合中就少了02
        //建立一个集合
        ArrayList<String> a2 = new ArrayList<>();

        //填加元素
        a2.add("努力01");
        a2.add("努力02");
        a2.add("努力03");

        sop(a2);

        //演示列表迭代器
        ListIterator<String> li =a2.listIterator();

        while (li.hasNext()) //如果仍有元素可以迭代
        {
            Object obj = li.next();  //返回迭代的下一个元素
            if(obj.equals("努力02"))//指定的对象与列表是否相等.
                li.set("努力08");//用指定元素替换列表中指定位置元素
            
        }
        sop(a2);
    }
    public static void sop(Object obj)
    {
        System.out.println(obj);
    }

}

/*
迭代器 只有3钟方法:
方法摘要
 boolean hasNext()
          如果仍有元素可以迭代,则返回 true。
 E next()
          返回迭代的下一个元素。
 void remove()
          从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。

只有 3种方法没有添加怎么办呢.


java.util
接口 Iterator<E>
                        这个哥们提供了小弟
所有已知子接口:
ListIterator<E>, (列表迭代器)


小弟继承了Iterator
public interface ListIterator<E>extends Iterator<E>


列表迭代器继承着迭代器,,,而列表迭代器因为他里面有指针,角标.
                它的方法 要比他爹的方法多的多.
*/
诸位正值青春年少,一定恣情放纵,贪恋香艳梅施之情,喜欢风流雅韵之事,洒脱木拘。然而诸位可知,草上露一碰即落,竹上霜一触即溶,此种风情难于长久。
原文地址:https://www.cnblogs.com/shilipojianshen/p/13023686.html