摘要:一,迭代器的原理我們大家都知道迭代器有個(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è)元素都沒(méi)有 private int courser = -1; //判斷是否有下一個(gè)元素 public boolean hasNext(){ return courser+1二,迭代器調(diào)用
上面我們將迭代器的3個(gè)基本方法分別自定義的寫(xiě)了一遍,我們來(lái)考慮迭代器調(diào)用的問(wèn)題,如果每次調(diào)用迭代器用一個(gè)方法來(lái)封裝一下 不更加方便一些,不需要重復(fù)創(chuàng)建對(duì)象,開(kāi)辟多余的內(nèi)存空間。
//創(chuàng)建一個(gè)內(nèi)部類(lèi),面向接口編程,使用了一個(gè)內(nèi)部類(lèi) private class MyIter implements Iterator{ private int courser = -1; public boolean hasNext(){ return courser+1上面的數(shù)組 是一個(gè)固定 寫(xiě)死了的,可不可以寫(xiě)一個(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ù)組的容量超過(guò)了5,這個(gè)時(shí)候就需要擴(kuò)容 if(this.size == elem.length){//說(shuō)明數(shù)組的容量不夠 elem = Arrays.copyOf(elem, elem.length+5);//自定義,想加多少就多少 } elem[size] = ele; size++;//實(shí)際大小+1 }三,迭代器泛型
我們基本上了解了迭代器的一些實(shí)現(xiàn)原理,但是迭代器的類(lèi)型也是固定的,可不可以用泛型來(lái)隨意操作迭代器的類(lèi)型呢?
public class ArrayListimplements java.lang.Iterable { /** * 使用泛型 可以操作多個(gè)類(lèi)型 */ //泛型沒(méi)有數(shù)組,所以這里使用Object來(lái)接收 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)部類(lèi) public Iterator iterator(){ return new Iterator (){//Iterator迭代器接口實(shí)現(xiàn)類(lèi)(匿名)對(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非常的類(lèi)似,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的子類(lèi),實(shí)現(xiàn)字符串的分割,但是不支持正則表達(dá)式
String emails = "cc@163.com;cc@qq.com;cc@sina.com"; 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://specialneedsforspecialkids.com/yun/64813.html
摘要:什么是迭代器中創(chuàng)建迭代器如下所示什么是生成器生成器是一種返回迭代器的函數(shù)每當(dāng)招待完一條語(yǔ)句后函數(shù)就會(huì)自動(dòng)停止執(zhí)行關(guān)鍵字可返回任何值或表達(dá)式關(guān)鍵字只可在生成器內(nèi)部使用,在其它地方使用會(huì)導(dǎo)致程序拋出語(yǔ)法錯(cuò)誤所以下面例子是有錯(cuò)誤的可迭代對(duì)象具有屬 什么是迭代器 ES5中創(chuàng)建迭代器如下所示: function createIterator(items) { var i = 0 retu...
摘要:什么是迭代器中創(chuàng)建迭代器如下所示什么是生成器生成器是一種返回迭代器的函數(shù)每當(dāng)招待完一條語(yǔ)句后函數(shù)就會(huì)自動(dòng)停止執(zhí)行關(guān)鍵字可返回任何值或表達(dá)式關(guān)鍵字只可在生成器內(nèi)部使用,在其它地方使用會(huì)導(dǎo)致程序拋出語(yǔ)法錯(cuò)誤所以下面例子是有錯(cuò)誤的可迭代對(duì)象具有屬 什么是迭代器 ES5中創(chuàng)建迭代器如下所示: function createIterator(items) { var i = 0 retu...
摘要:迭代器是一種特殊對(duì)象,每一個(gè)迭代器對(duì)象都有一個(gè),該方法返回一個(gè)對(duì)象,包括和屬性。默認(rèn)情況下定義的對(duì)象是不可迭代的,但是可以通過(guò)創(chuàng)建迭代器。在迭代器中拋出錯(cuò)誤不再執(zhí)行生成器返回語(yǔ)句生成器中添加表示退出操作。迭代器是一個(gè)對(duì)象。 迭代器(Iterator) ES5實(shí)現(xiàn)迭代器 迭代器是什么?遇到這種新的概念,莫慌張。 迭代器是一種特殊對(duì)象,每一個(gè)迭代器對(duì)象都有一個(gè)next(),該方法返回一個(gè)對(duì)...
閱讀 1266·2021-11-24 09:39
閱讀 1517·2021-09-07 09:59
閱讀 3479·2019-08-30 15:54
閱讀 2474·2019-08-30 11:00
閱讀 2669·2019-08-29 15:06
閱讀 2160·2019-08-26 13:52
閱讀 427·2019-08-26 13:24
閱讀 2489·2019-08-26 12:20