學習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語句來遍歷所有相關的物件了
像這樣的用法:
- String[] s ={"a","b","c"};
- for (String ss : s) {
- System.out.println("ss: "+ss);
- }
不過,像一般自定義的類和其例項物件,想要使用for each語句來遍歷它本身集體的話,可能就要實現Iterable<T>介面了。
像以下的程式碼:
(code1)
- package cn.yang.collection;
- import java.util.Iterator;
- /**
- * 實現Iterable<E>介面的Person類
- * @author yangqinjiang
- *
- */
- public class Person implements Iterable<Person>{
- /**
- * 實現Iterable介面中要求實現的方法
- */
- @Override
- public Iterator<Person> iterator() {
- return new MyIterator();//返回一個MyIterator例項物件
- }
- /**
- * MyIterator是內部類,實現了Iterator<E>介面的類
- * 像這樣的內部類,在網路上有很多這樣的寫法,我這裡只是參考他們的寫法罷了
- * @author yangqinjiang
- *
- */
- class MyIterator implements Iterator<Person>{
- /**相當於索引*/
- private int index =0;
- @Override
- public boolean hasNext() {
- //只要在呼叫next()後,index自加,確保index不等於person的長度
- return index!=person.length;
- }
- @Override
- public Person next() {
- //使用索引來獲取person陣列中的某一項
- return person[index++];
- }
- @Override
- public void remove() {
- //未實現這個方法
- }
- }
- private String name;
- private int age;
- /**person陣列,是目標操作物件*/
- private Person[] person;
- /**為了方便簡單點,故寫一個這樣的構造方法*/
- public Person(int size){
- person=new Person[size];
- for (int i = 0; i < size; i++) {
- person[i]=new Person(""+i, i);
- }
- }
- public void add(Person person){
- //未實現這個方法
- }
- public Person(){
- //未實現這個方法
- }
- public Person(String name,int age){
- this.name=name;
- this.age=age;
- }
- //getter
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- @Override
- public String toString() {
- return "person [name=" + name + ", age=" + age + "]";
- }
- }
(code2)
- package cn.yang.collection;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- /**
- * 實現Iterable<E>介面的Person2類
- * @author yangqinjiang
- *
- */
- public class Person2 implements Iterable<Person2>{
- /**
- * 實現Iterable介面中要求實現的方法
- */
- @Override
- public Iterator<Person2> iterator() {
- return new MyIterator();//返回一個MyIterator例項物件
- }
- /**
- * MyIterator是內部類,實現了Iterator<E>介面的類
- * 像這樣的內部類,在網路上有很多這樣的寫法,我這裡只是參考他們的寫法罷了
- * @author yangqinjiang
- *
- */
- class MyIterator implements Iterator<Person2>{
- /**相當於索引,不過不是陣列索引*/
- private int index =0;
- @Override
- public boolean hasNext() {
- return index!=person.size();
- }
- @Override
- public Person2 next() {
- return person.get(index++);
- }
- @Override
- public void remove() {
- }
- }
- private String name;
- private int age;
- /**在Person2類中,person是一個陣列連結串列*/
- private List<Person2> person=new ArrayList<Person2>();
- /**新增一個新Person2例項物件到person連結串列中*/
- public void add(Person2 person2){
- this.person.add(person2);
- }
- public Person2(){
- }
- public Person2(String name,int age){
- this.name=name;
- this.age=age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- @Override
- public String toString() {
- return "person [name=" + name + ", age=" + age + "]";
- }
- }
(code3)
- /**
- * 使用"for each" 迴圈,可以列印陣列
- */
- private static void printStrings() {
- System.out.println("printStrings() method running");
- String[] s ={"d","f","s"};
- for (String ss : s) {
- System.out.println("ss: "+ss);
- }
- System.out.println("printStrings() method end\n");
- }
輸出結果:
printStrings() method running
ss: d
ss: f
ss: s
printStrings() method end
(code4)
- System.out.println("testPerson() method running");
- Person y1=new Person("1", 1);
- Person y2=new Person("2", 2);
- Person y3=new Person("3", 3);
- Person y4=new Person("4", 4);
- Person y5=new Person("5", 5);
- //陣列
- Person y[]={y1,y2,y3,y4,y5};
- for (Person ys : y) {
- System.out.println(ys.getName());
- }
- //Iterator
- System.out.println("Iterator<Person>...");
- Iterator<Person> i = new Person(10).iterator();
- while(i.hasNext()){
- System.out.println(i.next().toString());
- }
- //也可以這樣列印
- System.out.println("other...");
- Person yy=new Person(20);
- for (Person ys : yy) {
- System.out.println(ys.toString());
- }
- System.out.println("testPerson() method end\n");
輸出結果:
testPerson() method running
1
2
3
4
5
Iterator<Person>...
person [name=0, age=0]
...
person [name=9, age=9]
other...
person [name=0, age=0]
...
person [name=19, age=19]
testPerson() method end
(code5)
- System.out.println("testPerson2() method running");
- Person2 p = new Person2("300", 300);
- Person2 p1 = new Person2("30", 30);
- Person2 p2 = new Person2("40", 40);
- Person2 p3 = new Person2("50", 50);
- Person2 p4 = new Person2("60", 60);
- Person2 p5 = new Person2("70", 70);
- p.add(p1);
- p.add(p2);
- p.add(p3);
- p.add(p4);
- p.add(p5);
- //Iterator
- Iterator<Person2> ii=p.iterator();
- while (ii.hasNext()) {
- System.out.println("Person2: "+ii.next().toString());
- }
- System.out.println("testPerson2() method end\n");
輸出結果:
testPerson2() method running
Person2: person [name=30, age=30]
Person2: person [name=40, age=40]
Person2: person [name=50, age=50]
Person2: person [name=60, age=60]
Person2: person [name=70, age=70]
testPerson2() method end
總結:很明顯,實現這個介面允許物件成為 "foreach" 語句的目標。(呵呵,拿這句話來當成總結吧)
20120504,五四青年節喲,為何學校不放假?呀,五一才過了不久,又想著放五四節了》》其實在大學裡,可以把每天當成週末的啦。光陰似箭啊,珍惜
相關文章
- Java學習筆記--我的第一個Java程式Java筆記
- java 一個類實現兩個介面的案例Java
- Redis設計與實現學習筆記(一)Redis筆記
- (一)Java併發學習筆記Java筆記
- JAVA 學習併發筆記(一)Java筆記
- Java Spring Boot 學習筆記(一)JavaSpring Boot筆記
- java學習小記Java
- JAVA學習筆記Java筆記
- 《JAVA學習指南》學習筆記Java筆記
- Java學習筆記:Javaweb的伺服器介紹Java筆記Web伺服器
- gcc簡介(學習筆記)GC筆記
- ZooKeeper學習筆記三:使用ZooKeeper實現一個簡單的配置中心筆記
- Java小白的學習日記一(自用筆記)Java筆記
- SpringCloud學習筆記(一) 搭建一個SpringCloudSpringGCCloud筆記
- Dart語言學習筆記(一) —— Dart簡介Dart筆記
- java學習筆記6Java筆記
- Java學習筆記4Java筆記
- Java JNI 學習筆記Java筆記
- Java 集合學習筆記Java筆記
- JAVA 兩個類同時實現同一個介面的方法Java
- react小書學習筆記React筆記
- Java複習筆記第二篇--集合學習之實現原理二Java筆記
- Java學習筆記(一) 猜數遊戲Java筆記遊戲
- 學習筆記-JAVA第一天筆記Java
- ZooKeeper學習筆記四:使用ZooKeeper實現一個簡單的分散式鎖筆記分散式
- Java學習筆記記錄(二)Java筆記
- MuJoCo 學習筆記:簡介 Overview筆記View
- Jenkinsant介紹(學習筆記五)Jenkins筆記
- 學習筆記(一)筆記
- spring原始碼學習筆記之容器的基本實現(一)Spring原始碼筆記
- Flutter 學習筆記① 第一個 Flutter AppFlutter筆記APP
- 一個 GitLab CI/CD 的學習筆記Gitlab筆記
- Java JDK 9學習筆記JavaJDK筆記
- TensorFlow Java API 學習筆記JavaAPI筆記
- Java學習筆記系列-反射Java筆記反射
- 【部分】Java速成學習筆記Java筆記
- Java基礎學習筆記Java筆記
- Java學習筆記--運算子Java筆記
- Kotlin for Java Developers 學習筆記KotlinJavaDeveloper筆記