Java集合框架————集合輸出

在之前進行集合輸出的時候都利用了toString(),或者利用了List接口中的get()方法。這些都不是集合的標準輸出。如果從標準上來講,集合輸出一共有四種手段:Iterator、ListIterator、Enumeration、foreach。

1.迭代輸出:Iterator

在JDK1.5之前,在Collection接口中就定義有iterator()方法,通過此方法可以取得Iterator接口的實例化對象;而在JDK1.5之後,將此方法提升爲Iterable接口中的方法。無論你如何提升,只要Collection有這個方法,那麼List、Set
也一定有此方法。

對於Iterator接口最初的設計裏面實際有三個抽象方法:

  1. 判斷是否有下一個元素: public boolean hasNext();
  2. 取得當前元素: public E next();
  3. 刪除元素: public default void remove(); 此方法從JDK1.8開始變爲default完整方法。

範例:標準的Iterator使用

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorDemo {

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("hello");
        list.add("Hello");
        list.add("bad man");
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
            String str = iterator.next();
            System.out.println(str);
        }
    }
}

對於Iterator接口中提供的remove()方法主要解決的就是集合內容的刪除操作。

範例:刪除元素

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorDemo {

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("hello");
        list.add("Hello");
        list.add("bad man");
        list.add("B");
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
            String str = iterator.next();
            if(str.equals("B")){
                iterator.remove();
                 // 使用集合提供的remove()方法,則會產生ConcurrentModificationException
                 // list.remove("B") ;
                 // 使用Iterator的remove方法則不會產生異常

                continue;
            }
            System.out.println(str);
        }
    }
}

在這裏插入圖片描述

注意:以後在進行集合輸出的時候不要修改集合中元素!!!

2.雙向迭代接口 ListIterator

Iterator輸出有一個特點:只能夠由前向後進行內容的迭代處理,而如果要想進行雙向迭代,那麼就必須依靠Iterator的子接口:ListIterator來實現。首先來觀察一下此接口定義的方法:

  1. 判斷是否有上一個元素:public boolean hasPrevious();
  2. 取得上一個元素:public E previous();

Iterator接口對象是由Collection接口支持的,但是ListIterator是由List接口支持的,List接口提供有如下方法:

取得ListIterator接口對象:public ListIterator listIterator();

範例:觀察ListIterator接口使用

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class TestDemo {

    public static void main(String[] args) {
        List<String> list = new ArrayList<>() ;
        list.add("Hello") ;
        list.add("Hello") ;
        list.add("B") ;
        list.add("bad man") ;
        ListIterator<String> listIterator = list.listIterator() ;
        System.out.print("從前向後輸出: ") ;
        while (listIterator.hasNext()) {
            System.out.print(listIterator.next()+"、") ;
        }
        System.out.print("\n從後向前輸出: ") ;
        while (listIterator.hasPrevious()) {
            System.out.print(listIterator.previous()+"、") ;
        }
    }
}

如果要想實現由後向前的輸出,那麼應該首先進行從前向後的輸出,否則無法實現雙向。

3.Enumeration枚舉輸出

在JDK1.0的時候就引入了Enumeration輸出接口,而在JDK1.5的時候對其也做了更正,主要是追加了泛型的應用。

首先來觀察Enumeration的接口定義:

  1. 判斷是否有下一個元素:public boolean hasMoreElements();
  2. 取得元素:public E nextElement();

但是要想取得這個接口的實例化對象,是不能依靠Collection、List、Set等接口的。只能夠依靠Vector子類,因爲Enumeration最早的設計就是爲Vector服務的,在Vector類中提供有一個取得Enumeration接口對象的方法:

取得Enumeration接口對象:public Enumeration elements()

範例:使用Enumeration輸出

import java.util.Enumeration;
import java.util.Vector;


public class TestDemo {
        public static void main(String[] args) {
            Vector<String> vector = new Vector<>() ;
            vector.add("Hello") ;
            vector.add("Hello") ;
            vector.add("B") ;
            vector.add("Bad man") ;
            Enumeration<String> enumeration = vector.elements() ;
            while (enumeration.hasMoreElements()) {
                System.out.println(enumeration.nextElement()) ;
        }
    }
}

一些操作類庫上依然只支持Enumeration,而不支持Iterator。

4.foreach輸出

從JDK1.5開始foreach可以輸出數組,實際上除了數組之外也可以輸出集合。

範例:使用foreach輸出

import java.util.ArrayList;
import java.util.List;

public class TestDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>() ;
         list.add("Hello") ;
        list.add("Hello") ;
        list.add("B") ;
        list.add("Bad man") ;
        for (String str : list) {
            System.out.println(str) ;
        }
    }
}

總結:

  1. 看見集合輸出就使用Iterator
  2. Iterator和Enumeration中的方法掌握好
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章