国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

一篇文章看懂java迭代器

kyanag / 835人閱讀

摘要:具體原因在后面說明是必須實現的接口,返回了一個迭代器。迭代器,可以對已知集合進行遍歷操作。這里可以看出,循環最終其實是會使用方法獲取迭代器,來完成遍歷。

概述

迭代器,提供了在不了解集合內部實現方法的時候遍歷集合的能力。可以將容器內部實現與遍歷操作隔離、解耦。

使用迭代器實現一個簡單集合

通過自定義一個簡單集合,并在對其使用迭代器進行遍歷,達到掌握迭代器的目的。

集合描述

一個簡單的集合,規則如下

1、只能存放三個字符串

2、若插入第四個數據,則覆蓋第一個位置。

實現接口描述 Iterable接口描述

如果想用foreach對集合遍歷,則必須實現該接口。(具體原因在后面說明)

iterator():是必須實現的接口,返回了一個迭代器。

Iterator

迭代器,可以對已知集合進行遍歷操作。

hasNext():必須實現,返回一個boolean表示是否有下一個值

next():必須實現,從集合中返回下一個元素。

代碼實現 自定義集合
/**
 * 自定義集合
 * 功能: 只能插入三個元素, 插入第四個元素會替換集合中第一個元素
 * 實現了Iterable(可迭代)接口,必須要實現其中的iterator方法,返回一個迭代器
 **/
public class MyCollection implements Iterable {
    String value1;
    String value2;
    String value3;

    int currentValueIndex = 1;

    public String get(int index) {
        switch (index) {
            case 1: return value1;
            case 2: return value2;
            case 3: return value3;
            default: return null;
        }
    }

    /**
     * 添加一個元素, currentValueIndex為當前元素索引, 表示下一次插入的位置
     * 維護了一個只可以插入三個String的集合
     * @param value
     * @return
     */
    public boolean add(String value) {
        switch (currentValueIndex) {
            case 1: value1 = value; currentValueIndex++; break;
            case 2: value2 = value; currentValueIndex++; break;
            case 3: value3 = value; currentValueIndex-=2; break;
            default: break;
        }
        return true;
    }

    /**
     * 返回我們自己定義的集合迭代器
     * @return
     */
    @Override
    public Iterator iterator() {
        return new MyCollectionIterator(this);
    }
}
自定義迭代器

自定義了一個迭代器,可以對上面自定義集合進行遍歷。

/**
 * 給我自己實現的集合實現一個迭代器
 * 必須實現的方法
 * hasNext是否有下一個元素
 * next取出下一個元素
 */
public class MyCollectionIterator implements Iterator {

    int index = 1;

    int maxIndex = 3;

    MyCollection myCollection;

    public MyCollectionIterator(MyCollection myCollection) {
        this.myCollection = myCollection;
    }

    /**
     * 如果當前指針已經指向3,就沒有下一個了,返回false
     * 否則還有下一個
     * @return
     */
    @Override
    public boolean hasNext() {
        if (index > maxIndex) {
            return false;
        }
        return true;
    }

    /**
     * 取出下一個元素,指針向前移動一步
     * @return
     */
    @Override
    public String next() {
        String result = myCollection.get(index);
        index ++;
        return result;
    }

}
測試方法
public class Test {
    public static void main(String[] args) {
        MyCollection collection = new MyCollection();
        collection.add("test1");
        collection.add("test2");
        collection.add("test3");

        /**
         * 循環1,獲取MyCollection的迭代器, 用while和next、hasNext遍歷我們的自定義集合
         */
        Iterator iterator = collection.iterator();
        while (iterator.hasNext()) {
            String str = iterator.next();
            System.out.println(str);
        }


        /**
         * 循環2,因為我們的集合實現了Iterable接口,因此可以使用forEach循環
         * 但是foreach循環編譯的結果是和循環1一模一樣的代碼
         */
        for (String s : collection) {
            System.out.println(s);
        }
    }
}
測試代碼反編譯結果

這里是上述測試代碼反編譯后的代碼,可以看到,上面的循環2(foreach),已經被編譯成了和循環1一樣的結構。這里可以看出,foreach循環最終其實是會使用iterator()方法獲取迭代器,來完成遍歷。因此如果想使用foreach循環,則必須實現Iterable接口。

public class Test {
    public Test() {
    }

    public static void main(String[] args) {
        MyCollection collection = new MyCollection();
        collection.add("test1");
        collection.add("test2");
        collection.add("test3");
        Iterator iterator = collection.iterator();

        while(iterator.hasNext()) {
            String str = (String)iterator.next();
            System.out.println(str);
        }

        Iterator var5 = collection.iterator();

        while(var5.hasNext()) {
            String s = (String)var5.next();
            System.out.println(s);
        }

    }
}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74289.html

相關文章

  • 后端技術 - 收藏集 - 掘金

    摘要:理解迭代對象迭代器生成器后端掘金本文源自作者的一篇博文,原文是,俺寫的這篇文章是按照自己的理解做的參考翻譯。比較的是兩個對象的內容是后端掘金黑魔法之協程異步后端掘金本文為作者原創,轉載請先與作者聯系。 完全理解關鍵字with與上下文管理器 - 掘金如果你有閱讀源碼的習慣,可能會看到一些優秀的代碼經常出現帶有 with 關鍵字的語句,它通常用在什么場景呢?今天就來說說 with 和 上下...

    oujie 評論0 收藏0
  • Java NIO詳解

    摘要:前言本篇主要講解中的機制和網絡通訊中處理高并發的分為兩塊第一塊講解多線程下的機制第二塊講解如何在機制下優化資源的浪費服務器單線程下的機制就不用我介紹了,不懂得可以去查閱下資料那么多線程下,如果進行套接字的使用呢我們使用最簡單的服務器來幫助大 前言 本篇主要講解Java中的IO機制和網絡通訊中處理高并發的NIO 分為兩塊:第一塊講解多線程下的IO機制第二塊講解如何在IO機制下優化CPU資...

    rickchen 評論0 收藏0
  • Java進階之路

    摘要:探索專為而設計的將探討進行了何種改進,以及這些改進背后的原因。關于最友好的文章進階前言之前就寫過一篇關于最友好的文章反響很不錯,由于那篇文章的定位就是簡單友好,因此盡可能的摒棄復雜的概念,只抓住關鍵的東西來講,以保證大家都能看懂。 周月切換日歷 一個可以進行周月切換的日歷,左右滑動的切換月份,上下滑動可以進行周,月不同的視圖切換,可以進行事件的標記,以及節假日的顯示,功能豐富 Andr...

    sushi 評論0 收藏0
  • ES6 迭代簡介

    摘要:簡單介紹下規范里面迭代器相關的概念。接口指定迭代器對象必須實現一個方法,如下示例偽代碼。方法是否接受參數,在規范中并不嚴格限定,取決于實現當前這個迭代器的對象。表示迭代終結,后續再調用當前迭代器的方法,返回的對象一律為。 簡單介紹下 ES6 規范里面迭代器(Iterator)相關的概念。最近為啥會看到迭代器,是因為看了 fetch 相關的 Headers 接口,為了實現下 Header...

    mingde 評論0 收藏0
  • EOS入門指南PART7——如何操作multi_index

    摘要:比如,第一張圖中,如果傳入的參數為,那就可以找出所有為的數據了,放入迭代器里。每次小的遍歷結束是,迭代器,表示繼續訪問迭代器中的下一行。 上一章我們學習了對智能合約開發來說至關重要的第一步: 知道了RAM、multi_index和EOS數據庫各是什么以及它們之間的關系; 知道了multi_index是內存數據庫的入口; 了解了multi_index內部的結構長什么樣子; 今天這...

    用戶84 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<