一起Talk Android吧(第八十九回:Java中的類集之Iterator)

各位看官們,大家好,上一回中咱們說的是Java中類集之Set的例子,這一回咱們說的例子是Java中的類集之Iterator。閒話休提,言歸正轉。讓我們一起Talk Android吧!

看官們,我們在前面的章回中介紹了類集中常用的接口及其實現類,這些接口及其實現類都是用來存放數據的,本章回中我們將介紹一個不用來存放數據的接口:Iterator

有看官提問,不用來存放數據,它還有什麼用呢?它主要用來輸出類集中的數據,因此稱它爲類集中的迭代器

如果把List等接口比作是數據倉庫,那麼迭代器就是快遞小哥,快遞小哥把倉庫中的數據送到千家萬戶。接下來我們看看快遞小哥是如何把倉庫中的數據送到千家萬戶的。

Iterator提供了hasNext(),next(),remove()方法。

  • hasNext()用來判斷倉庫中是否有元素
  • next()用來獲取當前的元素
  • remove()用來刪除當前的元素

關於它們的使用,有一個標準的格式:

//collection表示類集中的某個子接口或者實現類的對象 
Iterator<Integer> iterator = collection.iterator();
while(iterator.hasNext()){ 
    System.out.print(iterator.next()+" "); 
} 

這個格式在list,queue,set.這些子接口以及它們的子類中都可以使用。

看官們,這就是從類集中輸出數據的標準操作。有看官說,這個看着很簡單呀,我也可以去幹快遞小哥的工作,其實這個真不簡單,類集封裝了很東西后給大家提供了簡潔的方法來輸出類集中的數據。因此看上去簡單,其實不簡單,不信你幹上一天快遞小哥試試。

看官們,隨着Java版本的升級,Java提供了foreach循環,因此我們可以使用foreach循環來輸出類集中的數據。有看官說,它與迭代器相比,哪個輸出操作好一些?從性能的角度看它們倆個平分秋色。因爲編譯器會把foreach循環轉換爲帶有迭代器的循環。在實際的項目中,輸出類集中數據的時候,使用迭代器和foreach循環都可以,至於使用哪種,沒有特殊的規定。不過老一些的代碼中使用迭代器的情況多一些。

看官們,我們在前面章回中輸出類集中的數據時大部分使用了toString()方法,接下來我們通過代碼來演示如何使用迭代器和foreach循環來輸出類集中的數據。

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

public class iteratorEx {
    public static void main(String args[]){
        List<Integer> arrayList = new ArrayList<>();
        List<Integer> linkedList = new LinkedList<>();
        Set<Integer> hashSet = new HashSet<>();
        Set<Integer> treeSet = new TreeSet<>();

        //init all kinds of collection object
        for(int i=0; i<10; ++i) {
            arrayList.add(i);
            linkedList.add(i+1);
            hashSet.add(i+2);
            treeSet.add(i+3);
        }

        //output the content of collection object by Iterator
        Iterator<Integer> iter = arrayList.iterator();
        System.out.print("arrayList:  ");
        while(iter.hasNext()) {
            System.out.print(iter.next()+ " ");
        }
        System.out.println("");

        iter = linkedList.iterator();
        System.out.print("linkedList: ");
        while(iter.hasNext()) {
            System.out.print(iter.next()+ " ");
        }
        System.out.println("");

        iter = hashSet.iterator();
        System.out.print("hashSet:    ");
        while(iter.hasNext()) {
            System.out.print(iter.next()+ " ");
        }
        System.out.println("");

        iter = treeSet.iterator();
        System.out.print("treeSet:    ");
        while(iter.hasNext()) {
            System.out.print(iter.next()+ " ");
        }
        System.out.println("");

        //output the content of collection object by foreach
        System.out.println("-----------------------------------");
        System.out.print("arrayList:  ");
        for(Integer i: arrayList) {
            System.out.print(i+" ");
        }
        System.out.println(" ");

        System.out.print("linkedList: ");
        for(Integer i: linkedList) {
            System.out.print(i+" ");
        }
        System.out.println(" ");

        System.out.print("hashSet:    ");
        for(Integer i: hashSet) {
            System.out.print(i+" ");
        }
        System.out.println(" ");

        System.out.print("treeSet:    ");
        for(Integer i: treeSet) {
            System.out.print(i+" ");
        }
        System.out.println(" ");
    }
}

下面是程序的運行結果,請參考:

arrayList:  0 1 2 3 4 5 6 7 8 9 
linkedList: 1 2 3 4 5 6 7 8 9 10 
hashSet:    2 3 4 5 6 7 8 9 10 11 
treeSet:    3 4 5 6 7 8 9 10 11 12 
-----------------------------------
arrayList:  0 1 2 3 4 5 6 7 8 9  
linkedList: 1 2 3 4 5 6 7 8 9 10  
hashSet:    2 3 4 5 6 7 8 9 10 11  
treeSet:    3 4 5 6 7 8 9 10 11 12  

各位看官,關於Java中類集之Iterator的例子咱們就介紹到這裏,欲知後面還有什麼例子,且聽下回分解!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章