是誰實(shí)現(xiàn)了Iterator接口?

             如果應(yīng)用Java集合框架,很多時(shí)候都會(huì)用到Iterator接口類型的對象對集合中的元素進(jìn)行遍歷。但尋遍Java API幫助文檔,卻找不到任何類實(shí)現(xiàn)了Iterator接口。那么到底是誰實(shí)現(xiàn)了這個(gè)接口呢?

          其實(shí),因?yàn)椴煌蠈?shí)現(xiàn)類后臺(tái)工作的數(shù)據(jù)結(jié)構(gòu)有所不同,所以沒有辦法用一個(gè)類來實(shí)現(xiàn)Iterator接口,可以使之適用于所有集合。這樣,實(shí)現(xiàn)Iterator接口的任務(wù)就落到了集合實(shí)現(xiàn)類自己身上。

          由于實(shí)現(xiàn)了Iterator接口的類僅與具體的集合實(shí)現(xiàn)類有關(guān),所以這個(gè)類被設(shè)計(jì)成了私有的內(nèi)部類,也正因?yàn)檫@樣我們在幫助文檔中看不到這個(gè)類的說明。

          下面以數(shù)組實(shí)現(xiàn)的線性表為例,做一個(gè)簡單的演示,相信看過了這段代碼,大家就會(huì)清楚了。

          說明:我們這里主要是講解Iterator接口的使用,所以在這個(gè)例子中只提供了add和get兩個(gè)方法,以減少代碼,便于大家閱讀。

          package javase.study.oldboy;

          import java.util.Iterator;
          public class OurArrayList<E> implements Iterable<E> {
              
          private E[] datas;
              
          private int size;

              
          public OurArrayList() {
                  
          this(16);
              }


              @SuppressWarnings(
          "unchecked")
              
          public OurArrayList(int capacity) {
                  datas 
          = (E[]) new Object[capacity];
                  size 
          = 0;
              }


              @SuppressWarnings(
          "unchecked")
              
          public void add(int index, E obj) {
                  
          if (size >= datas.length) {
                      E[] newData 
          = (E[]) new Object[datas.length * 2 + 1];
                      System.arraycopy(datas, 
          0, newData, 0, datas.length);
                      datas 
          = newData;
                  }


                  
          for (int i = size - 1; i >= index; i--)
                      datas[i 
          + 1= datas[i];
                  datas[index] 
          = obj;
                  size
          ++;
              }


              
          public E get(int index) {
                  
          if (index < size) {
                      
          return (E) datas[index];
                  }
           else
                      
          return null;
              }


              
          public Iterator<E> iterator() {

                  return new Itr<E>();
              
           }
                
                private class Itr implements Iterator {
                  int count = 0;
                 
          public boolean hasNext() {
                     
          return count < size;
                 }


                
          public E next() {
                     
          return get(count++);
                 }


                 @Override
                
          public void remove() {
                     
          // TODO Auto-generated method stub
                 }


                }
          }



          ----------------------------------
          把人做到寬容,把技術(shù)做到強(qiáng)悍。

          posted on 2008-03-28 12:29 OldBoy 閱讀(879) 評論(2)  編輯  收藏 所屬分類: Java基礎(chǔ)

          評論

          # re: 是誰實(shí)現(xiàn)了Iterator接口? 2008-12-07 13:10 T

          果然如此,和我想的一樣  回復(fù)  更多評論   

          # re: 是誰實(shí)現(xiàn)了Iterator接口? 2009-06-18 19:03 xiaoman

          天哪,這都是什么東東啊?  回復(fù)  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 岳池县| 永福县| 册亨县| 湖北省| 兖州市| 黄山市| 轮台县| 蒙城县| 福贡县| 丰镇市| 红安县| 阳朔县| 屏边| 礼泉县| 渝北区| 永川市| 东明县| 遂溪县| 井研县| 岳阳市| 富裕县| 盘锦市| 平阳县| 穆棱市| 彭水| 龙川县| 伊金霍洛旗| 柯坪县| 太白县| 义乌市| 海晏县| 永福县| 达尔| 兴安县| 格尔木市| 赤峰市| 余干县| 乐业县| 南雄市| 绥阳县| 博罗县|