zoukankan      html  css  js  c++  java
  • 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>
    
    
    列表迭代器继承着迭代器,,,而列表迭代器因为他里面有指针,角标.
                    它的方法 要比他爹的方法多的多.
    */
    诸位正值青春年少,一定恣情放纵,贪恋香艳梅施之情,喜欢风流雅韵之事,洒脱木拘。然而诸位可知,草上露一碰即落,竹上霜一触即溶,此种风情难于长久。
  • 相关阅读:
    《小学四则运算练习软件》GUI
    小学四则运算练习软件项目报告
    速读《现代软件工程——构建之法》
    个人学期总结
    201571030102/201571030133《小学四则运算软件软件需求说明》结对项目报告
    201571030102软件工程结对项目
    201571030102小学生四则运算
    速读《现代软件工程----构建之法》有感
    个人学期总结
    201571030103/201571030105 《小学四则运算练习软件软件需求说明》结对项目报告
  • 原文地址:https://www.cnblogs.com/shilipojianshen/p/13023686.html
Copyright © 2011-2022 走看看