黑马程序员技术交流社区

标题: 集合输出总结 [打印本页]

作者: dadai5ai    时间: 2015-7-31 10:42
标题: 集合输出总结

虽然在Collection接口之中提供有将数据变为对象数组的输出形式,但是所有的开发者基本上都不会使用此类访问,因为对于集合的输出有四类主要操作:Iterator、ListIterator、Enumeration、foreach。

4.1、迭代输出:Iterator(核心,95%)

          Iterator是最为常用的一个输出接口,而这个接口的定义如下:

public interface Iterator {
    public boolean hasNext() ;  // 判断是否有数据
    public E next() ;   // 取数据
    public void remove() ;  // 删数据
}

         在之前所学习过的Scanner类就是Iterator接口的子类,但是在Iterator接口里面最常用的只有两个方法:hasNext()、next(),而remove()基本上一次都用不到。

         但是Iterator本身是一个接口,如果要想为此接口实例化对象,则需要使用Collection接口定义的方法:

                   · 取得Iterator接口对象:public Iterator iterator()

范例:利用Iterator输出数据

package cn.mldn.demo;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class TestDemo {
    public static void main(String[] args) throws Exception {
        List all = new ArrayList() ;
        all.add("HELLO") ;
        all.add("HELLO") ;
        all.add("WORLD") ;
        all.add("你好") ;
        Iterator iter = all.iterator() ;
        while (iter.hasNext()) {
            String str = iter.next() ;
            System.out.println(str);
        }
    }
}

         那么此时的操作形式就是在集合输出的标准形式。以后不管是何种开发,只要面对集合的输出操作,不需要做任何思考,永恒使用Iterator输出。

4.2、双向迭代输出:ListIterator(理解,0.01%)

         Iterator只能够完成由前向后的单向输出,而ListIterator可以完成双向的输出,ListIterator定义如下:

public interface ListIterator
extends Iterator

         ListIterator是Iterator的子接口,所以在此接口里面重点只观察两个方法:

                   · 判断是否有前一个数据:public boolean hasPrevious();

                   · 取出前一个数据:public E previous()。

         但是如果要想取得ListIterator接口对象,那么只能够依靠List接口完成。

package cn.mldn.demo;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class TestDemo {
    public static void main(String[] args) throws Exception {
        List all = new ArrayList() ;
        all.add("HELLO") ;
        all.add("HELLO") ;
        all.add("WORLD") ;
        all.add("你好") ;
        System.out.print("由前向后输出:");
        ListIterator iter = all.listIterator() ;
        while (iter.hasNext()) {
            String str = iter.next() ;
            System.out.print(str + "、");
        }
        System.out.print("\n由后向前输出:");
        while (iter.hasPrevious()) {
            String str = iter.previous() ;
            System.out.print(str + "、");
        }
    }
}

         如果要想进行由后向前的输出一定要首先发生由前向后的输出,实在是罗嗦,没用。

4.3、古老的输出:Enumeration(重点,4.98%)

         Enumeration是在JDK 1.0的时候就提出的一个输出接口,最早是将其称为枚举输出。不过后来随着发展,Enumeration使用的几率越来越少(你们一定会用的),那么Enumeration接口定义如下:

public interface Enumeration {
    public boolean hasMoreElements() ;  // 是否有下一个元素
    public E nextElement() ;            // 取出元素
}

         但是如果要想取得Enumeration接口实例也是不能够依靠集合接口,只能够依靠Vector类,在Vector子类里面定义了如下方法:public Enumeration elements()

范例:使用Enumeration输出

package cn.mldn.demo;
import java.util.Enumeration;
import java.util.Vector;
public class TestDemo {
    public static void main(String[] args) throws Exception {
        Vector all = new Vector() ;
        all.add("HELLO") ;
        all.add("HELLO") ;
        all.add("WORLD") ;
        all.add("你好") ;
        Enumeration enu = all.elements() ;
        while(enu.hasMoreElements()) {
            String data = enu.nextElement() ;
            System.out.println(data);
        }
    }
}

         如果不到必须使用Enumeration接口的时候能不用还是不用它,都使用Iterator比较好。

4.4、新的输出:foreach(理解,0.01%)

         在之前使用过foreach进行数组的输出,但是对于foreach而言也可以进行集合数据的输出操作,只不过很少有人这样去做。尤其针对于初学者,还是使用标准的Iterator会更好一些。

package cn.mldn.demo;
import java.util.ArrayList;
import java.util.List;
public class TestDemo {
    public static void main(String[] args) throws Exception {
        List all = new ArrayList() ;
        all.add("HELLO") ;
        all.add("HELLO") ;
        all.add("WORLD") ;
        all.add("你好") ;
        for (String str : all) {
            System.out.println(str);
        }
    }
}

        以上的操作谨慎使用,能不用最好。








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2