集合的输出本身也是有多种形式的,可以使用如下的几种方式:

  Iterator 迭代输出、ListIterator、Enumeration、foreach

  Iterator

   Iterator 属于迭代输出,基本的操作原理:是不断的判断是否有下一个元素,有的话,则直接输出。

public interface Iterator<E>

  要想使用此接口,则必须使用 Collection 接口,在 Collection 接口中规定了一个 iterator()方法,可以用于为 Iterator 接口进行实例化操作。

  

 

   通过 Collection 接口为其进行实例化之后,一定要记住,Iterator 中的操作指针是在第一条元素之上,当调用 next()方法的时候,获取当前指针指向的值并向下移动,使用 hasNext()可以检查序列中是否还有元素。

  

 

   

package org.listdemo.iteratordemo;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class IteratorDemo01 {
  public static void main(String[] args) {
    Collection<String> all = new ArrayList<String>();
      all.add("A");
      all.add("B");
      all.add("C");
      all.add("D");
      all.add("E");
      Iterator<String> iter = all.iterator();
      while (iter.hasNext()) {// 判断是否有下一个元素
        String str = iter.next(); // 取出当前元素
        System.out.print(str + "、");
      }
  }
}

  以上的操作是 Iterator 接口使用最多的形式,也是一个标准的输出形式。

  但是在使用 Iterator 输出的时候有一点必须注意,在进行迭代输出的时候如果要想删除当前元素,则只能使用 Iterator接口中的 remove()方法,而不能使用集合中的 remove()方法。否则将出现未知的错误。

  Iterator 接口本身可以完成输出的功能,但是此接口只能进行由前向后的单向输出。如果要想进行双向输出,则必须使用其子接口 —— ListIterator。

  ListIterator 

  ListIterator 是可以进行双向输出的迭代接口,此接口定义如下:

public interface ListIterator<E> extends Iterator<E>

  此接口是 Iterator 的子接口,此接口中定义了以下的操作方法:

  

 

   但是如果要想使用 ListIterator 接口,则必须依靠 List 接口进行实例化。

  List 接口中定义了以下的方法:ListIterator<E> listIterator()

  

package org.listdemo.listiteratordemo;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class ListIteratorDemo01 {
  public static void main(String[] args) {
    List<String> all = new ArrayList<String>();
      all.add("A");
      all.add("B");
      all.add("C");
      all.add("D");
      all.add("E");
      ListIterator<String> iter = all.listIterator();
      System.out.print("从前向后输出:");
      while (iter.hasNext()) {
        System.out.print(iter.next() + "、");
      }
      System.out.print("\n从后向前输出:");
      while (iter.hasPrevious()) {
        System.out.print(iter.previous() + "、");
      }
  }
}

  此处有一点需要注意的是,如果要想进行由后向前的输出,则首先必须先进行由前向后的输出。

  废弃的接口:Enumeration 

   Enumeration 是一个非常古老的输出接口,其也是一个元老级的输出接口,最早的动态数组使用 Vector 完成,那么只要是使用了 Vector 则就必须使用 Enumeration 进行输出。

public interface Enumeration<E>

 

  常用方法:

  

 

   与 Iterator 不同的是,如果要想使用 Enumeration 输出的话,则还必须使用 Vector 类完成,在类中定义了如下方法:public Enumeration<E> elements()

package org.listdemo.enumerationdemo;
import java.util.Enumeration;
import java.util.Vector;
public class EnumerationDemo01 {
  public static void main(String[] args) {
    Vector<String> v = new Vector<String>();
      v.add("A");
      v.add("B");
      v.add("C");
      Enumeration<String> enu = v.elements();
      while (enu.hasMoreElements()) {
        System.out.println(enu.nextElement());
      }
  }
}

  在大部分的情况下,此接口都不再使用了,但是对于一些古老的类库,本身依然要使用此接口进行操作。

  新的支持:foreach 

   foreach语句是java5新增,在遍历数组、集合的时候,foreach拥有不错的性能foreach 可以用来输出数组的内容,那么也可以输出集合中的内容。

  for循环中的循环条件中的变量只求一次值,foreach是for语句的简化,但是foreach并不能替代for循环。可以这么说,任何foreach都能改写为for循环,但是反之则行不通。

package org.lamp.listdemo.foreachdemo;
import java.util.ArrayList;
import java.util.Collection;
public class ForeachDemo01 {
  public static void main(String[] args) {
    Collection<String> all = new ArrayList<String>();
      all.add("A");
      all.add("B");
      all.add("C");
      all.add("D");
      all.add("E");
      for (String str : all) {
        System.out.println(str) ;
      }
  }
}

  在使用 foreach 输出的时候一定要注意的是,里面的操作泛型要指定具体的类型。

end~