在之前进行集合输出的时候都利用了toString(),或者利用了List接口中的get()方法。这些都不是集合的标准输出。
如果从标准上来讲,集合输出一共有四种手段:Iterator、ListIterator、Enumeration、foreach,接下来就详细讲述一下这几种方法

一、迭代输出

在JDK1.5之前,在Collection接口中就定义有iterator()方法,通过此方法可以取得Iterator接口的实例化对象;而在
JDK1.5之后,将此方法提升为Iterable接口中的方法。无论你如何提升,只要Collection有这个方法,那么List、Set
也一定有此方法。
对于Iterator接口最初的设计里面实际有三个抽象方法:

  1. 判断是否有下一个元素: public boolean hasNext();
  2. 取得当前元素: public E next();
  3. 删除元素: public default void remove(); 此方法从JDK1.8开始变为default完整方法
public class TestIterator {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("wo");
        list.add("ni");
        list.add("ta");
        System.out.println(list);
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
     // 注意next方法在同一个循环中不能出现俩次,否则会抛出NoSuchElementException
            String str = iterator.next();
            if (str.equals("wo")) {
                iterator.remove();         
                continue;
            }
            System.out.println(str);
        }
    }
}
结果:ni ta

二、 双向迭代接口:ListIterator

Iterator输出有一个特点:只能够由前向后进行内容的迭代处理,而如果要想进行双向迭代,那么就必须依靠
Iterator的子接口:ListIterator来实现。首先来观察一下此接口定义的方法:

  1. 判断是否有上一个元素:public boolean hasPrevious();
  2. 取得上一个元素:public E previous();
    Iterator接口对象是由Collection接口支持的,但是ListIterator是由List接口支持的,List接口提供有如下方法:
    取得ListIterator接口对象:public ListIterator listIterator()
public class TestListIterator {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>() ;
        list.add("Hello") ;
        list.add("Hello") ;
        list.add("B") ;
        list.add("Bit") ;
        ListIterator<String> iterator=list.listIterator();
        System.out.print("从前向后输出: ") ;
        while (iterator.hasNext()) {
            System.out.print(iterator.next()+"、") ;
        }
        System.out.println("\n从后向前输出: ") ;
        while(iterator.hasPrevious()){ 
            System.out.println(iterator.previous());
         }
    }
}

如果要想实现由后向前的输出,那么应该首先进行从前向后的输出,否则无法实现双向。

三、Enumeration枚举输出

定义:

  1. 判断是否有下一个元素:public boolean hasMoreElements();
  2. 取得元素:public E nextElement();
  3. 要想取得这个接口的实例化对象,是不能依靠Collection、List、Set等接口的。只能够依靠Vector子类,因为Enumeration最早的设计就是为Vector服务的,在Vector类中提供有一个取得Enumeration接口对象的方法:public Enumeration elements();
public class TestEnumeration {
    public static void main(String[] args) {
        Vector<String> vector=new Vector<>();
        vector.add("wo");
        vector.add("ni");
        vector.add("ta");
        Enumeration<String> iterator=vector.elements();
        while(iterator.hasMoreElements()){
            System.out.println(iterator.nextElement());
        }
    }
}

四、foreach输出

public class TestForeach {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("wo");
        list.add("ni");
        list.add("ta");
        System.out.println(list);
        for(String a:list){
            System.out.println(a);
        }
    }
}

总结
一些操作类库上依然只支持Enumeration,而不支持Iterator。看见集合输出就用Iterator