摘要:一,迭代器的原理我們大家都知道迭代器有個(gè)方法,分別是下面分別自定義實(shí)現(xiàn)個(gè)方法解釋迭代器的原理。
一,迭代器的原理
我們大家都知道迭代器有3個(gè)方法,分別是 hashNext(); next(); remove();,下面分別自定義實(shí)現(xiàn)3個(gè)方法 解釋迭代器的原理。
//數(shù)組存儲(chǔ)值 private String [] elem = {"a","b","c"}; //數(shù)組大小 private int size = elem.length; //定義計(jì)數(shù)器(指針 游標(biāo)),在數(shù)組里面,0 代表第一個(gè)元素,-1 代表一個(gè)元素都沒有 private int courser = -1; //判斷是否有下一個(gè)元素 public boolean hasNext(){ return courser+1二,迭代器調(diào)用
上面我們將迭代器的3個(gè)基本方法分別自定義的寫了一遍,我們來考慮迭代器調(diào)用的問題,如果每次調(diào)用迭代器用一個(gè)方法來封裝一下 不更加方便一些,不需要重復(fù)創(chuàng)建對(duì)象,開辟多余的內(nèi)存空間。
//創(chuàng)建一個(gè)內(nèi)部類,面向接口編程,使用了一個(gè)內(nèi)部類 private class MyIter implements Iterator{ private int courser = -1; public boolean hasNext(){ return courser+1上面的數(shù)組 是一個(gè)固定 寫死了的,可不可以寫一個(gè)方法,可以靈活的添加數(shù)組元素呢?
//定義一個(gè)初始元素只有5個(gè)大小的數(shù)組 private String [] elem =new String[5]; private String [] elem =new String[5]; //大小 private int size = 0; public void add(String ele){ //如果數(shù)組的容量超過了5,這個(gè)時(shí)候就需要擴(kuò)容 if(this.size == elem.length){//說明數(shù)組的容量不夠 elem = Arrays.copyOf(elem, elem.length+5);//自定義,想加多少就多少 } elem[size] = ele; size++;//實(shí)際大小+1 }三,迭代器泛型
我們基本上了解了迭代器的一些實(shí)現(xiàn)原理,但是迭代器的類型也是固定的,可不可以用泛型來隨意操作迭代器的類型呢?
public class ArrayListimplements java.lang.Iterable { /** * 使用泛型 可以操作多個(gè)類型 */ //泛型沒有數(shù)組,所以這里使用Object來接收 private Object [] elem =new Object[5]; private int size = 0; public void add(E ele){ if(this.size == elem.length){ elem = Arrays.copyOf(elem, elem.length+5); } elem[size] = ele; size++;//實(shí)際大小+1 } //使用匿名內(nèi)部類 public Iterator iterator(){ return new Iterator (){//Iterator迭代器接口實(shí)現(xiàn)類(匿名)對(duì)象 private int courser = -1; public boolean hasNext(){ return courser+1 list = new ArrayList (); list.add(1); list.add(2); for(Integer element:list){ System.out.println(element); } //操作String ArrayList listStr = new ArrayList (); listStr.add("as"); listStr.add("asss"); for(String str:listStr){ System.out.println(str); } } } 講到迭代器,有一個(gè)接口 叫Enumberation 隨便回顧一下,這個(gè)接口在jdk1.5之前用的非常的頻繁,跟上文講到的Iterator非常的類似,hasMoreElements() 判斷是否有下一個(gè)元素,nextElement()獲取下一個(gè)元素 案列如下:
Vectorvc = new Vector (); vc.add("a"); vc.add("b"); vc.add("c"); Enumeration en = vc.elements(); while(en.hasMoreElements()){ System.out.println(en.nextElement()); } StringTokenizer 是Enumberation的子類,實(shí)現(xiàn)字符串的分割,但是不支持正則表達(dá)式
String emails = "[email protected];[email protected];[email protected]"; StringTokenizer str = new StringTokenizer(emails,";");//只支持分隔符,不支持正則表達(dá)式 while(str.hasMoreElements()){ System.out.println(str.nextElement()); }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64813.html
摘要:什么是迭代器中創(chuàng)建迭代器如下所示什么是生成器生成器是一種返回迭代器的函數(shù)每當(dāng)招待完一條語句后函數(shù)就會(huì)自動(dòng)停止執(zhí)行關(guān)鍵字可返回任何值或表達(dá)式關(guān)鍵字只可在生成器內(nèi)部使用,在其它地方使用會(huì)導(dǎo)致程序拋出語法錯(cuò)誤所以下面例子是有錯(cuò)誤的可迭代對(duì)象具有屬 什么是迭代器 ES5中創(chuàng)建迭代器如下所示: function createIterator(items) { var i = 0 retu...
摘要:什么是迭代器中創(chuàng)建迭代器如下所示什么是生成器生成器是一種返回迭代器的函數(shù)每當(dāng)招待完一條語句后函數(shù)就會(huì)自動(dòng)停止執(zhí)行關(guān)鍵字可返回任何值或表達(dá)式關(guān)鍵字只可在生成器內(nèi)部使用,在其它地方使用會(huì)導(dǎo)致程序拋出語法錯(cuò)誤所以下面例子是有錯(cuò)誤的可迭代對(duì)象具有屬 什么是迭代器 ES5中創(chuàng)建迭代器如下所示: function createIterator(items) { var i = 0 retu...
摘要:迭代器是一種特殊對(duì)象,每一個(gè)迭代器對(duì)象都有一個(gè),該方法返回一個(gè)對(duì)象,包括和屬性。默認(rèn)情況下定義的對(duì)象是不可迭代的,但是可以通過創(chuàng)建迭代器。在迭代器中拋出錯(cuò)誤不再執(zhí)行生成器返回語句生成器中添加表示退出操作。迭代器是一個(gè)對(duì)象。 迭代器(Iterator) ES5實(shí)現(xiàn)迭代器 迭代器是什么?遇到這種新的概念,莫慌張。 迭代器是一種特殊對(duì)象,每一個(gè)迭代器對(duì)象都有一個(gè)next(),該方法返回一個(gè)對(duì)...
閱讀 1315·2021-11-24 09:39
閱讀 1600·2021-09-07 09:59
閱讀 3528·2019-08-30 15:54
閱讀 2521·2019-08-30 11:00
閱讀 2722·2019-08-29 15:06
閱讀 2198·2019-08-26 13:52
閱讀 477·2019-08-26 13:24
閱讀 2555·2019-08-26 12:20