1. 程式人生 > >學習java筆記 --- 一個實現Iterable介面的小范例

學習java筆記 --- 一個實現Iterable介面的小范例

from:http://blog.csdn.net/yangqinjiang/article/details/7536005

以下的文件摘自JDK 5.0文件說明

java.lang

介面 Iterable<T>

public interface Iterable<T>

實現這個介面允許物件成為 "foreach" 語句的目標。


方法摘要
Iterator<T> iterator() 
返回一個在一組 T 型別的元素上進行迭代的迭代器。
方法詳細資訊

iterator

Iterator<T> iterator()
返回一個在一組 T 型別的元素上進行迭代的迭代器。
返回:

一個迭代器。

=============================================

以下的文字不是摘自JDK 5.0文件

其中上面有說明了,實現這個介面允許物件成為 "foreach" 語句的目標。這樣就可以類似使用陣列那樣,用foreach語句來遍歷所有相關的物件了

像這樣的用法:

  1. String[] s ={"a","b","c"};  
  2. for
     (String ss : s) {  
  3.     System.out.println("ss: "+ss);  
  4. }  
Iterable<T>
不過,像一般自定義的類和其例項物件,想要使用for each語句來遍歷它本身集體的話,可能就要實現Iterable<T>介面了。

像以下的程式碼:

(code1)

  1. package cn.yang.collection;  
  2. import java.util.Iterator;  
  3. /** 
  4.  * 實現Iterable<E>介面的Person類 
  5.  * @author yangqinjiang
     
  6.  * 
  7.  */
  8. publicclass Person implements Iterable<Person>{  
  9.     /** 
  10.      * 實現Iterable介面中要求實現的方法 
  11.      */
  12.     @Override
  13.     public Iterator<Person> iterator() {  
  14.         returnnew MyIterator();//返回一個MyIterator例項物件
  15.     }  
  16.     /** 
  17.      * MyIterator是內部類,實現了Iterator<E>介面的類 
  18.      * 像這樣的內部類,在網路上有很多這樣的寫法,我這裡只是參考他們的寫法罷了 
  19.      * @author yangqinjiang 
  20.      * 
  21.      */
  22.     class MyIterator implements Iterator<Person>{  
  23.         /**相當於索引*/
  24.         privateint index =0;  
  25.         @Override
  26.         publicboolean hasNext() {  
  27.             //只要在呼叫next()後,index自加,確保index不等於person的長度
  28.             return index!=person.length;  
  29.         }  
  30.         @Override
  31.         public Person next() {  
  32.             //使用索引來獲取person陣列中的某一項
  33.             return person[index++];  
  34.         }  
  35.         @Override
  36.         publicvoid remove() {  
  37.             //未實現這個方法
  38.         }  
  39.     }  
  40.     private String name;  
  41.     privateint age;  
  42.     /**person陣列,是目標操作物件*/
  43.     private Person[] person;  
  44.     /**為了方便簡單點,故寫一個這樣的構造方法*/
  45.     public Person(int size){  
  46.         person=new Person[size];  
  47.         for (int i = 0; i < size; i++) {  
  48.             person[i]=new Person(""+i, i);  
  49.         }  
  50.     }  
  51.     publicvoid add(Person person){  
  52.         //未實現這個方法
  53.     }  
  54.     public Person(){  
  55.         //未實現這個方法
  56.     }  
  57.     public Person(String name,int age){  
  58.         this.name=name;  
  59.         this.age=age;  
  60.     }  
  61.     //getter
  62.     public String getName() {  
  63.         return name;  
  64.     }  
  65.     publicvoid setName(String name) {  
  66.         this.name = name;  
  67.     }  
  68.     publicint getAge() {  
  69.         return age;  
  70.     }  
  71.     publicvoid setAge(int age) {  
  72.         this.age = age;  
  73.     }  
  74.     @Override
  75.     public String toString() {  
  76.         return"person [name=" + name + ", age=" + age + "]";  
  77.     }  
  78. }  

(code2)
  1. package cn.yang.collection;  
  2. import java.util.ArrayList;  
  3. import java.util.Iterator;  
  4. import java.util.List;  
  5. /** 
  6.  * 實現Iterable<E>介面的Person2類 
  7.  * @author yangqinjiang 
  8.  * 
  9.  */
  10. publicclass Person2 implements Iterable<Person2>{  
  11.     /** 
  12.      * 實現Iterable介面中要求實現的方法 
  13.      */
  14.     @Override
  15.     public Iterator<Person2> iterator() {  
  16.         returnnew MyIterator();//返回一個MyIterator例項物件
  17.     }  
  18.     /** 
  19.      * MyIterator是內部類,實現了Iterator<E>介面的類 
  20.      * 像這樣的內部類,在網路上有很多這樣的寫法,我這裡只是參考他們的寫法罷了 
  21. 相關推薦

    學習java筆記 --- 一個實現Iterable介面

    以下的文件摘自JDK 5.0文件說明 java.lang 介面 Iterable<T> public interface Iterable<T> 實現這個介面允許物件成為 "foreach" 語句的目標。 方法摘要 Iterator<

    學習java筆記 --- 一個實現Iterable介面

    from:http://blog.csdn.net/yangqinjiang/article/details/7536005 以下的文件摘自JDK 5.0文件說明 java.lang 介面 Iterable<T> p

    [java學習筆記]Iterator和Iterable介面

        Iterator和Iterable都是java的迭代器介面,二者既有區別又有聯絡,下面從介面定義,實現和方法呼叫三方面分析兩介面的關係和使用方法。 1.介面定義 1.1 Iterable     Iter

    大數據學習——java代碼實現對HDFS文件的read、append、write操作

    導入 () 學習 ioe java 1.8 todo ever col 在之前的環節進行了HDFS 的搭建過程,接下來學習的內容是通過java代碼實現對HDFS中文件進行操作。 這部分學習是為了之後在使用到的MapRedce對HDFS 文件進行操作。 在eclipse上編寫

    effective java——12考慮實現coparable介面

     float和double型別的主要設計目標是為了科學計算和工程計算。他們執行二進位制浮點運算,這是為了在廣域數值範圍上提供較為精確的快速近似計算而精心設計的。然而,它們沒有提供完全精確的結果,所以不應該被用於要求精確結果的場合。但是,商業計算往往要求結果精確,這時候BigDecimal就派上大用場

    機器學習實戰筆記(Python實現)-00-readme

    近期學習機器學習,找到一本不錯的教材《機器學習實戰》。特此做這份學習筆記,以供日後翻閱。 機器學習演算法分為有監督學習和無監督學習。這本書前兩部分介紹的是有監督學習,第三部分介紹的是無監督學習(也稱聚類)。有監督學習有兩種功能,一種是分類(本書第一部分介紹),一種是迴歸預測

    使用java完成一個猜數字的遊戲(資料範圍在1-100之間)

    最近開始學java,使用java做一個猜數字的小遊戲,程式碼不多,我就直接貼程式碼了 /* * A:案例演示 * 需求:猜數字小遊戲(資料在1-100之間) */ import java.util.Scanner; public class Test3_Guess

    為什麼陣列沒有實現Iterable介面,但可以使用foreach語句遍歷?

    在Java中,對於陣列為什麼能夠使用foreach語句一直感覺很困惑。 對於能夠使用foreach語句進行遍歷的物件,只有兩種情況,其中一種是遍歷物件必須實現Iterable介面,實現ierator(

    Java Bean類實現Serializable介面的原因

    為了儲存在記憶體中的各種物件的狀態(也就是例項變數,不是方法),並且可以把儲存的物件狀態再讀出來。雖然你可以用你自己的各種各樣的方法來儲存object states,但是Java為我們提供一種很好儲存物件狀態的機制,那就是序列化。   簡單來說序列化就是一種用來處理物件流的

    黑馬程式設計師--java筆記13--圖形使用者介面GUI

    ------- android培訓、java培訓、期待與您交流! ---------- 圖形使用者介面GUI Java.Awt(重量級控制元件、依賴平臺) Java.Swing(輕量級控制元件、有可移植性) 繼承關係圖:   Component:元件 Checkbox:複選

    Java反射+註解實現自動持久化例子(程式碼未優化)

    需要實現的功能:根據實體類自動生成Sql語句與引數。 基本思路是:在實體類上標識註解,使用反射讀取註解然後拼接Sql語句。 哦了,開始研究程式碼~ 有請主人公註解:

    java筆記——jsp實現簡單論壇

    在之前用struts2 spring ,hibernate 做過一些東西,這些框架總是各種配置,雖然做好了也並不知其中原理,所以決定回到原點做起,用jsp,jdbc 實現一些簡單的功能,重在理解java web最基礎的原理,對深入理解框架的原理很有幫助,不然只知道怎麼配置,

    思想無語言邊界:以 cglib 介紹 AOP 在 java一個實現方式

    # 0. 前言 上接:基於 Source Generators 做個 AOP 靜態編織小實驗 作為第三篇,我們基於cglib在java做一個簡單的aop例子, 以此簡單作為例子說一個思路在什麼樣的語言裡面都是共同的,這是骨,不要糾結什麼語言什麼實現,這只是皮。 同以前一樣,是個人隨筆,不是新手教學,不

    javaIterable介面的使用,實現一個單鏈表的迭代器

    單鏈表實現: public class MyLinkedList <T>{ private static class Entry<E>{ private E value; private Entry next;

    java 學習筆記--Comparator中為什麼其他類實現這個介面為什麼沒有複寫equals(Object obj)這個方法?

    其實java存在好多隱藏的複寫。 大多數類好像未複寫的方法其實是繼承父類的而方法而隱藏複寫的。 而如下例:  class HelloComparator implements Comparator  {@Overridepublic int compare(Object o

    IOS開發學習筆記實現一個簡單的登陸介面

    首先是要實現的效果圖:demo下載 首先在介面拖拽兩個Label,分別命名為姓名和密碼; 新增一個txtAccount,Text控制元件的placeholder類似於Android的Hint一樣

    Java例項 定義任務的一個發射程式 實現Runnable介面並編寫run()方法

    舉例: class LiftOff implements Runnable {protected int countDown = 10;  //預設值private static int taskCount = 0 ;private final int id = task

    java之Spring學習之前的一個demo

    服務 err const 對象 color void del () 添加 寫這個小demo呢,是為了在學習Spring之前,練習一下傳統的model2開發模式; 為了簡化流程,這裏省略了利用servlet來獲取前臺數據。 采用直接new出來的對象來交給程序處理,然後執行

    C#學習——簡單聊聊 QI(Query Interface 介面訪問)→一個實現多個介面

    內容目錄: 1,引言QI 2,例項 3,類與物件與介面之間的關係梳理 1,引言 在COM中,和我們打交道的是介面而不是類,那我們開發的時候要使用這些功能,就只能通過這些介面,通過介面提供的方法,COM是一種C / S架構(伺服器/客戶端),伺服器定義了操作的方法。客戶端則通過

    Java 集合學習之——JavaIterable介面的使用

    參考:https://www.cnblogs.com/LittleHann/p/3690187.html 雖然知道Iterable介面可以用來遍歷集合類中的內容,但是具體操作時還是遇到下面的問題了,   你知道Iterable預設指標指的的第一個物件還是,指標變數呢?看完下