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