日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 如何重写迭代器,如何用Java按需定制自己的迭代器

發布時間:2025/3/11 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 如何重写迭代器,如何用Java按需定制自己的迭代器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

編寫自己的迭代器的流程是:首先實現Iterable接口,進而實現該接口中的Iterator iterator()方法,該方法返回接口Iterator,Iterator接口中封裝了next,hasnext,remove等方法。實現了Iterable接口的類能夠通過foreach進行遍歷,分析Iterable與Iterator的區別:

(1)Iterable是對Iterator的外層封裝,對其加了一層外衣;

(2)接口Iterable依賴于Iterator接口;

(3)直接實現Iterable而不直接實現Iterator的原因:Iterator接口的核心方法next()或者hasNext() 是依賴于迭代器的當前迭代位置的。如果Collection直接實現Iterator接口,勢必導致集合對象中包含當前迭代位置的數據(指針)。當集合在不同方法間被傳遞時,由于當前迭代位置不可預置,那么next()方法的結果會變成不可預知。除非再為Iterator接口添加一個reset()方法,用來重置當前迭代位置。但即時這樣,Collection也只能同時存在一個當前迭代位置。而Iterable則不然,每次調用都會返回一個從頭開始計數的迭代器。多個迭代器是互不干擾的。

具體例子:

import Java.util.Iterator;

/**

* 實現Iterable接口的Person類

* @author yangqinjiang

*

*/

public class Person implements Iterable{

/**

* 實現Iterable接口中要求實現的方法

*/

@Override

public Iterator iterator() {

return new MyIterator();//返回一個MyIterator實例對象

}

/**

* MyIterator是內部類,實現了Iterator接口的類

* 像這樣的內部類,在網絡上有很多這樣的寫法,我這里只是參考他們的寫法罷了

* @author yangqinjiang

*

*/

class MyIterator implements Iterator{

/**相當于索引*/

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 + "]";

}

}

推薦閱讀:

總結

以上是生活随笔為你收集整理的java 如何重写迭代器,如何用Java按需定制自己的迭代器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。