设计模式之_Iterator_01
生活随笔
收集整理的這篇文章主要介紹了
设计模式之_Iterator_01
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
package com.learn.dp.iterator;/*** 這個容器內(nèi)部就是用數(shù)組裝的,不用考慮數(shù)組邊界的問題* 想往里面裝東西就直接裝就可以了,想知道裝了多少就調(diào)用size方法就OK了* 這個容器和數(shù)組相比就有了好處,因為它可以動態(tài)擴(kuò)展* 就是用Array來模擬可以動態(tài)增長的容器**/
public class ArrayList {/*** 我在這里定義一個數(shù)組,模擬可以裝任意多個對象的容器* 我們現(xiàn)在 一個數(shù)組往里頭裝任何的對象,加入這個數(shù)組里面能裝10個,* 一旦裝滿了之后,我就在這個數(shù)組的基礎(chǔ)上擴(kuò)展一些新的空間,一旦裝滿了就再擴(kuò)展新的空間* 這個時候我就可以往里頭裝任意多個對象了,所以這個寫法就簡單了,*/Object[] objects = new Object[10];/*** 默認(rèn)情況下一個都沒裝,index代表下一個空位置在哪里* 最開始一個都沒有裝,當(dāng)你裝的時候就在index這個位置上* 每當(dāng)我們添加一個新的進(jìn)來的時候,讓index++*/int index = 0;/*** 父類引用指向子類對象* 第一個容器我用數(shù)組來模擬,往里裝的時候要判斷一下,現(xiàn)在裝到哪了,* */public void add(Object o) {/*** 一旦你加到index==objects.length的時候,* 再往里面添加新對象的時候,超過他的容量了,這個時候把原來的數(shù)組做擴(kuò)展*/if(index==objects.length) {/*** 當(dāng)一個數(shù)組的容量不夠使了,我就new個新數(shù)組,新數(shù)組的容量是老數(shù)組的兩倍* 我們這么寫嚴(yán)格來講不是很科學(xué),兩倍兩倍一直乘下去話數(shù)量級會非常大,根據(jù)原來有多長再加多少,* 不過我們的重點(diǎn)并不是放在這個地方,所以我采取最簡單的方式,把原來的數(shù)組copy到新數(shù)組里面,* */Object[] newObjects = new Object[objects.length * 2];/*** 這里用到了System類的靜態(tài)方法* 這個方法要是不理解去讀API文檔,其實每次用到arraycopy文檔的時候總想罵SUN兩句* 如果按照J(rèn)AVA里面的變量駝峰標(biāo)識風(fēng)格的話,C一般大寫才對,可是這個C就是小寫* String類中的有一個substring第二個應(yīng)該是大寫,結(jié)果他還是小寫,個人柑橘非常的別扭* SUN有時候這些細(xì)節(jié)上不是非常的到位,很慶幸的是JAVA已經(jīng)被收購了,已經(jīng)不控制在SUN手里了* 這個世界感覺美好了很多* 第一個參數(shù)objects原來的數(shù)組* 第二個參數(shù)從哪里開始* 第三個參數(shù)拷貝到哪個數(shù)組去* 第四個參數(shù)目標(biāo)參數(shù)從哪里開始* 第五個參數(shù)是一共拷貝多少個* 原來數(shù)組滿了,所以一共拷貝這么多個*/System.arraycopy(objects, 0, newObjects, 0, objects.length);/*** 所以原來的引用就指向了新的數(shù)組*/objects = newObjects;}objects[index] = o;/*** 這樣index就記錄了我裝了多少個對象了* 每當(dāng)我添加一個新對象,index都要往上加*/index++;}/*** 作為一個容器別人一般會問你裝了多少個東西了* 調(diào)用它的時候告訴容器裝了多少個了*/public int size() {/*** 裝了index個了*/return index;}}
package com.learn.dp.iterator;public class Cat {public Cat(int id) {super();this.id = id;}/*** Cat只有一個屬性id*/private int id;
}
package com.learn.dp.iterator;public class MainTest {public static void main(String[] args) {ArrayList al = new ArrayList();/*** 我這個數(shù)組最多只能存儲10個對象,可是我就往里面添加15個,* 因為它會自動幫我擴(kuò)展,*/for(int i=0;i<15;i++) {al.add(new Cat(i));}System.out.println(al.size());}
}
?
總結(jié)
以上是生活随笔為你收集整理的设计模式之_Iterator_01的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jvm_垃圾收集算法讲解(二)
- 下一篇: 设计模式之_Iterator_02