zoukankan      html  css  js  c++  java
  • 集合输出

    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 }   
  • 相关阅读:
    第05组 Alpha冲刺(4/4)
    第05组 Alpha冲刺(3/4)
    第05组 Alpha冲刺(2/4)
    团队作业——总结
    beta版本发布-团队
    团队作业-Beta冲刺(周五)
    团队作业-Beta冲刺(周四)
    团队作业-Beta冲刺(周三)
    个人作业——Alpha项目测试
    团队项目第四次作业
  • 原文地址:https://www.cnblogs.com/Tony98/p/10562010.html
Copyright © 2011-2022 走看看