精品国产亚洲一区二区三区,男女作爱在线观看免费网站,欧美的又大又长做禁片A片,97国产精品人妻无码久久久

  • 相關(guān)軟件
    >Java源碼分析:深入探討Iterator模式 創(chuàng)建者:webmaster 更新時(shí)間:2005-05-16 21:54

    java.util包中包含了一系列重要的集合類。本文將從分析源碼入手,深入研究一個(gè)集合類的內(nèi)部結(jié)構(gòu),以及遍歷集合的迭代模式的源碼實(shí)現(xiàn)內(nèi)幕。   下面我們先簡單討論一個(gè)根接口Collection,然后分析一個(gè)抽象類AbstractList和它的對(duì)應(yīng)Iterator接口,并仔細(xì)研究迭代子模式的實(shí)現(xiàn)原理。   本文討論的源代碼版本是JDK 1.4.2,因?yàn)镴DK 1.5在java.util中使用了很多泛型代碼,為了簡化問題,所以我們還是討論1.4版本的代碼。   集合類的根接口Collection   Collection接口是所有集合類的根類型。它的一個(gè)主要的接口方法是: boolean add(Object c)   add()方法將添加一個(gè)新元素。注意這個(gè)方法會(huì)返回一個(gè)boolean,但是返回值不是表示添加成功與否。仔細(xì)閱讀doc可以看到,Collection規(guī)定:如果一個(gè)集合拒絕添加這個(gè)元素,無論任何原因,都必須拋出異常。這個(gè)返回值表示的意義是add()方法執(zhí)行后,集合的內(nèi)容是否改變了(就是元素有無數(shù)量,位置等變化),這是由具體類實(shí)現(xiàn)的。即:如果方法出錯(cuò),總會(huì)拋出異常;返回值僅僅表示該方法執(zhí)行后這個(gè)Collection的內(nèi)容有無變化。   類似的還有: boolean addAll(Collection c); boolean remove(Object o); boolean removeAll(Collection c); boolean remainAll(Collection c);   Object[] toArray()方法很簡單,把集合轉(zhuǎn)換成數(shù)組返回。Object[] toArray(Object[] a)方法就有點(diǎn)復(fù)雜了,首先,返回的Object[]仍然是把集合的所有元素變成的數(shù)組,但是類型和參數(shù)a的類型是相同的,比如執(zhí)行: String[] o = (String[])c.toArray(new String[0]);   得到的o實(shí)際類型是String[]。   其次,如果參數(shù)a的大小裝不下集合的所有元素,返回的將是一個(gè)新的數(shù)組。如果參數(shù)a的大小能裝下集合的所有元素,則返回的還是a,但a的內(nèi)容用集合的元素來填充。尤其要注意的是,如果a的大小比集合元素的個(gè)數(shù)還多,a后面的部分全部被置為null。   最后一個(gè)最重要的方法是iterator(),返回一個(gè)Iterator(迭代子),用于遍歷集合的所有元素。   用Iterator模式實(shí)現(xiàn)遍歷集合   Iterator模式是用于遍歷集合類的標(biāo)準(zhǔn)訪問方法。它可以把訪問邏輯從不同類型的集合類中抽象出來,從而避免向客戶端暴露集合的內(nèi)部結(jié)構(gòu)。   例如,如果沒有使用Iterator,遍歷一個(gè)數(shù)組的方法是使用索引: for(int i=0; i相關(guān)文章
    本頁查看次數(shù):