集合输出

Iterator迭代输出

  在之前集合输出的时候都利用了toString(),或者是利用了List接口中的get()方法,但是这些都不是集合的标准输出模式,如果从标准上来讲,集合的输出一定有四种手段:Iterator ListIterator Enumeraration foreach。

迭代输出:Iterator(95%)

  在JDK1.5之前Collection接口里面就定义有iterator()方法,通过此方法可以取得Iterator接口的实例化对象,在JDK1.5之后将此方法提升为了Iterable接口中的方法,但是不管你如何提升,必须清楚只要Collection有这个方法,那么List Set也此方法

  对于Iterator接口最初的设计里面实际上有三个抽象方法,

    判断是否有下一个元素:public boolean hasNext()

    取得当前元素:public E next()

    删除元素:public default void remove() 此方法从JDK1.8开始变为了default完整方法了,

范例:标准的Iterator使用

 1 package cn.Tony.demo;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Iterator;
 5 import java.util.List;
 6 
 7 public class TestDemo{
 8     public static void main(String[] args) throws Exception {
 9         List<String> all=new ArrayList<String>();
10         all.add("Hello");
11         all.add("Hello");
12         all.add("World");
13         Iterator<String> iter=all.iterator();//实例化Iterator接口对象
14         while(iter.hasNext()) {
15             System.out.println(iter.next());
16         }
17     }
18 } 

  对于Iterator接口中提供的remove()方法主要解决的就是集合内容的删除操作()。

 1 package cn.Tony.demo;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Iterator;
 5 import java.util.List;
 6 
 7 public class TestDemo{
 8     public static void main(String[] args) throws Exception {
 9         List<String> all=new ArrayList<String>();
10         all.add("Hello");
11         all.add("Hello");
12         all.add("a");
13         all.add("World");
14         Iterator<String> iter=all.iterator();//实例化Iterator接口对象
15         while(iter.hasNext()) {
16             String str=iter.next();
17             if("a".equals(str)) {//要删除的数据
18 //                all.remove("a");//如果执行此操作,则删除了后面中断执行了
19                 iter.remove();//如果不中断后续输出,就执行
20                 continue;
21             }
22             System.out.println(str);
23         }
24     }
25 } 

  集合的核心功能在于数据的增加和数据的取出,所以对于这种删除的操作根本就没有意义,开发中可能使用到的几率0.01,以后见到了集合输出的问题,不用思考直接使用Iterator接口

ListIterator双向迭代(0.01%)

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

    判断是否有上一个元素:public Boolean hasPrevious()

    判断取得上一个:public E previous();

  Iterctor接口的对象是有Collection接口支持的,但是ListIterator是有List接口支持的,

    取得ListIterator接口对象:public ListIterator<E>listIterator()

范例:观察ListIterator使用

 1 package cn.Tony.demo;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 import java.util.ListIterator;
 6 
 7 
 8 public class TestDemo{
 9     public static void main(String[] args) throws Exception {
10         List<String> all=new ArrayList<String>();
11         all.add("Hello");
12         all.add("World");
13         ListIterator<String> iter=all.listIterator();
14         System.out.println("由前向后输出");
15         while(iter.hasNext()) {
16             System.out.println(iter.next()+",");
17         }
18         System.out.println("
由后向前输出:");
19         while(iter.hasPrevious()) {
20             System.out.println(iter.previous()+",");
21         }
22     }
23 } 

  如果要想实现由后向前的输出,首先由前向后的输出,否则无法实现双向。

枚举输出:Enumeration(4.8)

  在JDK1.0的时候就引入了Enumeration输出接口,而在JDK1.5的时候针对其也做了更正,主要是追加了泛型的应用,来观察Enumeration的接口定义:

    判断是否下一个元素:public boolean hasMoreElements()

    取得元素: public E nextElement()

  但是如果要想取得这个接口的实例化对象,是不可能依靠Collection  List Set等接口的,只能依靠Vector子类,因为Enumeration最早的设计就是为Vector服务的,在Vector类中有一个取得Enu meratio对象的方法

    取得Enumeration接口对象 :public Enumeration<E> elements()

范例:使用Enumeration输出

 1 package cn.Tony.demo;
 2 
 3 import java.util.Enumeration;
 4 import java.util.Vector;
 5 
 6 public class TestDemo{
 7     public static void main(String[] args) throws Exception {
 8         Vector<String> all=new Vector<String>();
 9         all.add("Hello");
10         all.add("Hello");
11         all.add("World");
12         Enumeration<String> enu=all.elements();
13         while(enu.hasMoreElements()) {//判断是否下一个元素
14             System.out.println(enu.nextElement());
15         }
16     }
17 } 

  一些操作的类库上依然只是Enumeration,而不支持Iterator,虽然很少,但是在开发中必定要使用。

foreach输出

  将JDk1.5开始foreach可以输出数组,实际上除了数组之外,也可以输出集合操作。不管对于初学者而言不建议这样处理。

范例:直接使用foreach输出

 1 package cn.Tony.demo;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 public class TestDemo{
 7     public static void main(String[] args) throws Exception {
 8         List<String> all=new ArrayList<String>();
 9         all.add("Hello");
10         all.add("Hello");
11         all.add("World");
12         for(String str:all) {
13             System.out.println(str);
14         }
15     }
16 } 

  如果从代码的本质上来讲此处少了一个对象,但是Iterator只是一个输出对象,而是所有的内容还是在集合本身,对象占点空间没什么。

总结:

  1.看见集合输出就使用Iterator

  2.Iterator和Enumeration接口中的方法一定要掌握牢固.

Collections工具类

  Collection是集合的接口,而Collections是一个集合操作的工具类。例如:反转 排序。

范例:创建空集合

 1 package cn.Tony.demo;
 2 
 3 import java.util.Collections;
 4 import java.util.List;
 5 
 6 public class TestDemo{
 7     public static void main(String[] args) throws Exception {
 8         List<String> all=Collections.EMPTY_LIST;
 9         all.add("A");
10     }
11 }   

范例:利用Collection进行集合操

 1 package cn.Tony.demo;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collections;
 5 import java.util.List;
 6 
 7 public class TestDemo{
 8     public static void main(String[] args) throws Exception {
 9         List<String> all=new ArrayList<String>();
10         Collections.addAll(all, "A","B","C");
11         Collections.reverse(all);
12         System.out.println(all);
13     }
14 }   
原文地址:https://www.cnblogs.com/Tony98/p/10562010.html