虽然在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); } } } |
以上的操作谨慎使用,能不用最好。
|