迭代器 Iterator<String> it = coll.iterator();

06迭代器的概述

A:迭代器概述:
a:java中提供了很多個(gè)集合,它們?cè)诖鎯?chǔ)元素時(shí),采用的存儲(chǔ)方式不同。
我們要取出這些集合中的元素,可通過(guò)一種通用的獲取方式來(lái)完成。

b:Collection集合元素的通用獲取方式:在取元素之前先要判斷集合中有沒(méi)有元素,
如果有,就把這個(gè)元素取出來(lái),繼續(xù)在判斷,如果還有就再取出出來(lái)。一直把集合中的所有元素全部取出。這種取出方式專業(yè)術(shù)語(yǔ)稱為迭代。

c:每種集合的底層的數(shù)據(jù)結(jié)構(gòu)不同,例如ArrayList是數(shù)組,LinkedList底層是鏈表,但是無(wú)論使用那種集合,我們都會(huì)有判斷是否有元素
以及取出里面的元素的動(dòng)作,那么Java為我們提供一個(gè)迭代器定義了統(tǒng)一的判斷元素和取元素的方法

07迭代器的實(shí)現(xiàn)原理

A:迭代器的實(shí)現(xiàn)原理
/

* 集合中的迭代器:
* 獲取集合中元素方式
* 接口 Iterator : 兩個(gè)抽象方法
* boolean hasNext() 判斷集合中還有沒(méi)有可以被取出的元素,如果有返回true
* next() 取出集合中的下一個(gè)元素
*
* Iterator接口,找實(shí)現(xiàn)類.
* Collection接口定義方法
* Iterator iterator()
* ArrayList 重寫方法 iterator(),返回了Iterator接口的實(shí)現(xiàn)類的對(duì)象
* 使用ArrayList集合的對(duì)象
* Iterator it =array.iterator(),運(yùn)行結(jié)果就是Iterator接口的實(shí)現(xiàn)類的對(duì)象
* it是接口的實(shí)現(xiàn)類對(duì)象,調(diào)用方法 hasNext 和 next 集合元素迭代
*/

08迭代器的代碼實(shí)現(xiàn)

*A:迭代器的代碼實(shí)現(xiàn)
public class IteratorDemo {
public static void main(String[] args) {
Collection<String> coll = new ArrayList<String>();
coll.add("abc1");
coll.add("abc2");
coll.add("abc3");
coll.add("abc4");
//迭代器,對(duì)集合ArrayList中的元素進(jìn)行取出

      //調(diào)用集合的方法iterator()獲取出,Iterator接口的實(shí)現(xiàn)類的對(duì)象
      Iterator<String> it = coll.iterator();
      //接口實(shí)現(xiàn)類對(duì)象,調(diào)用方法hasNext()判斷集合中是否有元素
      //boolean b = it.hasNext();
      //System.out.println(b);
      //接口的實(shí)現(xiàn)類對(duì)象,調(diào)用方法next()取出集合中的元素
      //String s = it.next();
      //System.out.println(s);
      
      //迭代是反復(fù)內(nèi)容,使用循環(huán)實(shí)現(xiàn),循環(huán)的條件,集合中沒(méi)元素, hasNext()返回了false
      while(it.hasNext()){
        String s = it.next();
        System.out.println(s);
      }
      
     
      
    }
  }

09迭代器的執(zhí)行過(guò)程

A:迭代器的執(zhí)行過(guò)程
a:迭代器的原理:
while(it.hasNext()) {
System.out.println(it.next());
}

   //cursor記錄的索引值不等于集合的長(zhǎng)度返回true,否則返回false
     public boolean hasNext() {       
       return cursor != size; //cursor初值為0
                       
     }

    //next()方法作用:
    //①返回cursor指向的當(dāng)前元素 
    //②cursor++
    public Object next() {            
             int i = cursor; 
             cursor = i + 1;  
             return  elementData[lastRet = i]; 
         
         }
 b:for循環(huán)迭代寫法:
    for (Iterator<String> it2 = coll.iterator(); it2.hasNext();  ) {
     System.out.println(it2.next());
   } 

10集合迭代中的轉(zhuǎn)型

A:集合迭代中的轉(zhuǎn)型
a:在使用集合時(shí),我們需要注意以下幾點(diǎn):
? 集合中存儲(chǔ)其實(shí)都是對(duì)象的地址。
? 集合中可以存儲(chǔ)基本數(shù)值嗎?jdk1.5版本以后可以存儲(chǔ)了。
因?yàn)槌霈F(xiàn)了基本類型包裝類,它提供了自動(dòng)裝箱操作(基本類型?對(duì)象),這樣,集合中的元素就是基本數(shù)值的包裝類對(duì)象。

b:存儲(chǔ)時(shí)提升了Object。取出時(shí)要使用元素的特有內(nèi)容,必須向下轉(zhuǎn)型。
 Collection coll = new ArrayList();
 coll.add("abc");
 coll.add("aabbcc");
 coll.add("shitcast");
 Iterator it = coll.iterator();
 while (it.hasNext()) {
  //由于元素被存放進(jìn)集合后全部被提升為Object類型
 //當(dāng)需要使用子類對(duì)象特有方法時(shí),需要向下轉(zhuǎn)型
  String str = (String) it.next();
  System.out.println(str.length());
 }
 注意:如果集合中存放的是多個(gè)對(duì)象,這時(shí)進(jìn)行向下轉(zhuǎn)型會(huì)發(fā)生類型轉(zhuǎn)換異常。


c:Iterator接口也可以使用<>來(lái)控制迭代元素的類型的。代碼演示如下:
 Collection<String> coll = new ArrayList<String>();
 coll.add("abc");
 coll.add("aabbcc");
 coll.add("shitcast");
 Iterator<String> it = coll.iterator();
 while (it.hasNext()) {
  String str =  it.next(); 
 //當(dāng)使用Iterator<String>控制元素類型后,就不需要強(qiáng)轉(zhuǎn)了。獲取到的元素直接就是String類型
  System.out.println(str.length());
 }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容