美文网首页
4.集合输出(Iterator+Enummeration)

4.集合输出(Iterator+Enummeration)

作者: 秋笙fine | 来源:发表于2019-02-12 17:58 被阅读0次

    之前的讲解里面,发现Collection,List,Set中只有List是最方便进行输出操作的,所以本次要讲解集合的四种输出操作形式。

    集合在JDK1.8之前支持四种输出。
    Iterator(95%),ListIterator(0.05%),Enummeration(4.9%) foreach(0.05%)

    最常用的是Iterator,其次是Enummeration。这两个操作必须掌握。

    迭代输出接口:Iterator(核心)

    如果遇见了集合操作,那么一般而言都会使用Iterator接口进行集合的输出操作,首先看java.util.Iterator接口

    public interface Iterator<E>{
      public boolean hasNext();
      public E next();
    }
    

    这两个方法在Scanner类中见过,结果发现Scanner是Iterator接口的实现类。

    Iterator本身是一个接口,如果要想取得本接口实例化只能够依靠Collection接口,它有一个操作方法:public Iterator E iterator();

    范例:使用Iterator输出集合

        public static void main(String[] args) throws Exception {
    
            Set<String> all = new HashSet<String>();
            System.out.println("length:" + all.size() + " is empty:" + all.isEmpty());
            all.add("AA");
            all.add("BB");// 全部信息重复
            all.add("BB");
            System.out.println("length:" + all.size() + " is empty:" + all.isEmpty());
            Iterator<String> iter=all.iterator();//这里使用了Collection接口的一个方法取得Iterator对象
            while(iter.hasNext()){
                String str=iter.next();//Iterator规定了泛型 所以不需要使用类型转换
                System.out.println(str);
            }
    
        }
    
    image.png

    由于这里不是对象集合的比较,只是String,所以并没有HashSet的重复问题体现。

    综上,以后遇到集合遍历的问题,不需要任何思考,直接使用Iterator就可以了。

    双向迭代:ListIterator(了解)

    Iterator最大的问题是只能由前向后输出(99%的情况下都是这么作的),但是有些人认为应该可以实现双向输出(即可以由前向后,也可以由后向前)那么就可以使用Iterator的子接口——ListIterator接口。在这个接口里面主要是两个方法:
    判断是否有前一个元素:

    public boolean hasPrevious()
    

    取得前一个元素:

    public E previous();
    

    同样有hasnext,next。
    ListIterator是专门为List子接口定义的输出接口,List中含有:public ListIterator<E> listIterator用来获取实例

    范例:完成双向迭代

        public static void main(String[] args) throws Exception {
    
            List<String> all = new ArrayList<String>();
            System.out.println("length:" + all.size() + " is empty:" + all.isEmpty());
            all.add("AA");
            all.add("BB");// 全部信息重复
            all.add("BB");
            System.out.println("length:" + all.size() + " is empty:" + all.isEmpty());
            ListIterator<String> iter=all.listIterator();//这里使用了Collection接口的一个方法取得Iterator对象
            while(iter.hasNext()){
                String str=iter.next();//Iterator规定了泛型 所以不需要使用类型转换
                System.out.println(str);
            }
            System.out.println("由后向前输出:");
            while(iter.hasPrevious()){
                String str=iter.previous();
                System.out.println(str);
            }
    
        }
    
    image.png

    如果要想实现由后向前的输出操作之前,一定要首先发生由前向后输出。

    foreach输出

    理论上foreach输出还是挺方便使用的,但是如果你们现在过多的使用foreach不利于理解程序。foreach本身可以方便的输出数组,集合也可以。(foeeach输出集合不推荐 下面仅作展示)

        public static void main(String[] args) throws Exception {
    
            List<String> all = new ArrayList<String>();
            System.out.println("length:" + all.size() + " is empty:" + all.isEmpty());
            all.add("A");
            all.add("B");// 全部信息重复
            all.add("C");
            System.out.println("length:" + all.size() + " is empty:" + all.isEmpty());
            for(String str:all){
                System.out.println(str);
            }
    
        }
    
    image.png

    在初学阶段还是强烈建议使用Iterator操作。

    Enumeration输出

    Enumeration是与Vector类一起在JDK1.0的时候推出的输出接口,即:最早的Vector如果要想输出,就要使用我们的Enumeration接口。

    public interface Enumeretion<E>{
      public boolean hasMoreElements();//判断是否有下一个元素,等同于hasNext()
      public E nextElement();//取出元素,等同于next
    }
    

    但是如果想取得Enumeration接口的实例化对象只能够依靠Vector子类:
    取得Enumeration接口对象:public Enumeration<E> elements()

        public static void main(String[] args) throws Exception {
    
            Vector<String> all = new Vector<String>();
            System.out.println("length:" + all.size() + " is empty:" + all.isEmpty());
            all.add("A");
            all.add("B");// 全部信息重复
            all.add("C");
            System.out.println("length:" + all.size() + " is empty:" + all.isEmpty());
            Enumeration<String> enu=all.elements();
            while(enu.hasMoreElements()){
                String str=enu.nextElement();
                System.out.println(str);
            }
    
        }
    

    结果:


    image.png

    在一些古老的操作方法上,此接口依然会使用到,所以必须掌握

    总结

    虽然集合的输出提供有四种形式,但是一定要以Iterator以及Enumeration为主,并且一定要记清楚这两个接口的核心操作方法。(判断是否有下一个元素,如果有,就取出)

    相关文章

      网友评论

          本文标题:4.集合输出(Iterator+Enummeration)

          本文链接:https://www.haomeiwen.com/subject/lmnheqtx.html