![Thinking-in-Java-09(持有你的對(duì)象)_第1頁(yè)](http://file4.renrendoc.com/view12/M04/19/28/wKhkGWXw8tqAUt-lAACkH8e3o84477.jpg)
![Thinking-in-Java-09(持有你的對(duì)象)_第2頁(yè)](http://file4.renrendoc.com/view12/M04/19/28/wKhkGWXw8tqAUt-lAACkH8e3o844772.jpg)
![Thinking-in-Java-09(持有你的對(duì)象)_第3頁(yè)](http://file4.renrendoc.com/view12/M04/19/28/wKhkGWXw8tqAUt-lAACkH8e3o844773.jpg)
![Thinking-in-Java-09(持有你的對(duì)象)_第4頁(yè)](http://file4.renrendoc.com/view12/M04/19/28/wKhkGWXw8tqAUt-lAACkH8e3o844774.jpg)
![Thinking-in-Java-09(持有你的對(duì)象)_第5頁(yè)](http://file4.renrendoc.com/view12/M04/19/28/wKhkGWXw8tqAUt-lAACkH8e3o844775.jpg)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java編程思想第九章:持有你的對(duì)象持有你的對(duì)象Java有能力在任意時(shí)刻、任何地點(diǎn)產(chǎn)生任意個(gè)數(shù)的對(duì)象Java提供對(duì)象的持有方式:array(內(nèi)置),Collection(公用程序庫(kù))容器類都提供:對(duì)象置入方法、對(duì)象取出方法Arrays〔數(shù)組〕數(shù)組與其他集合類型區(qū)分開(kāi)來(lái):效率和類型檢驗(yàn)數(shù)組實(shí)際代表一個(gè)簡(jiǎn)單的線性序列使得元素的訪問(wèn)速度非常快,它的大小是固定的無(wú)論使用的數(shù)組屬于什么類型,數(shù)組標(biāo)識(shí)符實(shí)際都是指向真實(shí)對(duì)象的一個(gè)reference。那些對(duì)象本身是在內(nèi)存“堆”里創(chuàng)立的。數(shù)組初始化,數(shù)組reference分配給數(shù)組對(duì)象//:c09:ArraySize.java(p293)//Initialization&re-assignmentofarrays.classWeeble{}//AsmallmythicalcreaturepublicclassArraySize{publicstaticvoidmain(String[]args){//Arraysofobjects:Weeble[]a;//NullreferenceWeeble[]b=newWeeble[5];//NullreferencesWeeble[]c=newWeeble[4];for(inti=0;i<c.length;i++)c[i]=newWeeble();//Aggregateinitialization:Weeble[]d={newWeeble(),newWeeble(),newWeeble()};//Dynamicaggregateinitialization:a=newWeeble[]{newWeeble(),newWeeble()};
System.out.println("a.length="+a.length);System.out.println("b.length="+b.length);//Thereferencesinsidethearrayare//automaticallyinitializedtonull:for(inti=0;i<b.length;i++)System.out.println("b["+i+"]="+b[i]);System.out.println("c.length="+c.length);System.out.println("d.length="+d.length);a=d;System.out.println("a.length="+a.length);//Arraysofprimitives:int[]e;//Nullreferenceint[]f=newint[5];int[]g=newint[4];for(inti=0;i<g.length;i++)g[i]=i*i;int[]h={11,47,93};//Compileerror:variableenotinitialized://!System.out.println("e.length="+e.length);System.out.println("f.length="+f.length);//Theprimitivesinsidethearrayare//automaticallyinitializedtozero:for(inti=0;i<f.length;i++)System.out.println("f["+i+"]="+f[i]);System.out.println("g.length="+g.length);System.out.println("h.length="+h.length);e=h;System.out.println("e.length="+e.length);e=newint[]{1,2};System.out.println("e.length="+e.length);}}///:~Ans:a.length=2//加b.length=5b[0]=nullb[1]=nullb[2]=nullb[3]=nullb[4]=nullc.length=4d.length=3a.length=3a.length=2//刪f.length=5f[0]=0f[1]=0f[2]=0f[3]=0f[4]=0g.length=4h.length=3e.length=3e.length=2容納根本類型元素的容器容器類只能容納對(duì)象引用對(duì)一個(gè)數(shù)組,既可以直接容納根本類型的數(shù)據(jù),亦可容納指向?qū)ο蟮囊酶緮?shù)據(jù)類型數(shù)組效率會(huì)高出許多根本數(shù)據(jù)類型數(shù)組的靈活性差〔在需要的時(shí)候可自動(dòng)擴(kuò)展,騰出更多的空間〕返回一個(gè)數(shù)組:(C++利用指針)//:IceCream.java(p295)//ReturningarraysfrommethodspublicclassIceCream{staticString[]flav={"Chocolate","Strawberry","VanillaFudgeSwirl","MintChip","MochaAlmondFudge","RumRaisin","PralineCream","MudPie"};staticString[]flavorSet(intn){//Forceittobepositive&withinbounds:n=Math.abs(n)%(flav.length+1);String[]results=newString[n];boolean[]picked=newboolean[flav.length];for(inti=0;i<n;i++){intt;dot=(int)(Math.random()*flav.length);while(picked[t]);results[i]=flav[t];picked[t]=true;}returnresults;}
publicstaticvoidmain(String[]args){for(inti=0;i<20;i++){System.out.println("flavorSet("+i+")=");String[]fl=flavorSet(flav.length);for(intj=0;j<fl.length;j++)System.out.println("\t"+fl[j]);}}}///:~Ans:FlavorSet(1)=MintChipChocolateMudPieMochaAlmondFudgsPralineCreamRumRaisinStrawberryVanillaFudgeSwirlFlavorSet(2)=...FlavorSet(19)=..Arrays類:根本函數(shù)equals:比較兩個(gè)array是否相等(參閱p309)fill:將某值填入array(參閱p306)sort:進(jìn)行array排序(參閱p312)binarySearch:在排序的array尋找元素(參閱p313)asList:接受array,轉(zhuǎn)換為L(zhǎng)istSystem.arraycopy:array復(fù)制(參閱p307)BruceEckel庫(kù):Array2.java(參閱p297-p306)print()容器(container)簡(jiǎn)介L(zhǎng)ist:必須按特定的順序容納元素Set:不可包含任何重復(fù)的元素Map:一系列key-value對(duì)構(gòu)成的對(duì)象,Map可以返回由key形成的Set、或value形成的Collection,或含key-value對(duì)的SetBruceEckel庫(kù):Collection2.java(參閱p318-p323)
CountryCapitals.java
Arrays:容器類(Collection):一組各自獨(dú)立的元素容器的打印和array不同,能打印容器內(nèi)容//:c09:PrintingContainers.java〔p316)//Containersprintthemselvesautomatically.importjava.util.*;publicclassPrintingContainers{staticCollectionfill(Collectionc){c.add("dog");//publicbooleanadd(Object)c.add("dog");c.add("cat");returnc;}staticMapfill(Mapm){m.put("dog","Bosco");//publicObjectput(Object,Object)m.put("dog","Spot");m.put("cat","Rags");returnm;}publicstaticvoidmain(String[]args){System.out.println(fill(newArrayList()));System.out.println(fill(newHashSet()));System.out.println(fill(newHashMap()));}}///:~Ans:[dog,dog,cat]//按add的順序依次打印[cat,dog]//按字母順序依次打印{cat=Rags,
dog=Spot}//后者覆蓋先者容器的充填:〔參閱p317-p323)//:c09:FillingLists.java〔p317〕//TheCollections.fill()method.importjava.util.*;publicclassFillingLists{publicstaticvoidmain(String[]args){Listlist=newArrayList();for(inti=0;i<5;i++)list.add(“”);//list.add(“Hello”);完成同樣功能Collections.fill(list,“Hello”);System.out.println(list);}}///:~Ans:[Hello,Hello,Hello,Hello,Hello]函數(shù)Collection.fill():
將同一個(gè)objectreference復(fù)制到容器的每個(gè)位置只對(duì)list有效,不能作用于Set和map容器的缺點(diǎn):對(duì)象置入容器內(nèi),喪失了類型信息
〔JDK1.4允許指定元素型別〕//:CatsAndDogs.java(p324)//Simplecontainerexampleimportjava.util.*;classCat{privateintcatNumber;Cat(inti){catNumber=i;}voidprint(){System.out.println("Cat#"+catNumber);}}classDog{privateintdogNumber;Dog(inti){dogNumber=i;}voidprint(){System.out.println("Dog#"+dogNumber);}}publicclassCatsAndDogs{publicstaticvoidmain(String[]args){ArrayListcats=newArrayList();for(inti=0;i<7;i++)cats.add(newCat(i));//Notaproblemtoaddadogtocats:cats.add(newDog(7));
System.out.println(cats.size());//多加了一行for(inti=0;i<cats.size();i++)((Cat)cats.get(i)).print();//Dogisdetectedonlyatrun-time}}///:~Ans:8Cat#0Cat#1Cat#2Cat#3Cat#4Cat#5Cat#6Exceptioninthread"main"java.lang.ClassCastExceptionatjava.lang.ArrayList.get(ArrayList.java:306,compiledcode)atCatsAndDogs.main(CatsAndDogs.java:31,compiledcode)迭代器
訪問(wèn)和選擇一連串對(duì)象
是個(gè)泛型程序,適用于所有類型的容器迭代器是一個(gè)對(duì)象,作用是遍歷一系列對(duì)象,并選擇那個(gè)序列中的每個(gè)對(duì)象,同時(shí)不讓客戶程序員知道或關(guān)注那個(gè)序列的根底結(jié)構(gòu)。iterator():要求容器交給你一個(gè)iteratornext():取得序列下個(gè)元素(不用get())hasNext():檢查序列是否還有元素remove():移去最新傳回的元素//:c11:CatsAndDogs2.java(p328)//SimplecontainerwithIterator.importjava.util.*;classCat{privateintcatNumber;Cat(inti){catNumber=i;}voidprint(){System.out.println("Cat#"+catNumber);}}///:~classDog{privateintdogNumber;Dog(inti){dogNumber=i;}voidprint(){System.out.println("Dog#"+dogNumber);}}///:~publicclassCatsAndDogs2{publicstaticvoidmain(String[]args){ArrayListcats=newArrayList();for(inti=0;i<7;i++)cats.add(newCat(i));Iteratore=cats.iterator();while(e.hasNext())((Cat)e.next()).print();}}///:~Ans:Cat#0Cat#1Cat#2Cat#3Cat#4Cat#5Cat#6容器分類學(xué)虛線框代表接口點(diǎn)線框代表抽象類實(shí)線框代表實(shí)際類點(diǎn)線箭頭表示一個(gè)特定的類準(zhǔn)備實(shí)現(xiàn)一個(gè)接口實(shí)線箭頭表示一個(gè)類可生成箭頭指向的那個(gè)類的對(duì)象容器:簡(jiǎn)化后Collection:舉例//:c11:SimpleCollection.java(p332)//AsimpleexampleusingJava2Collections.importjava.util.*;publicclassSimpleCollection{publicstaticvoidmain(String[]args){//Upcastbecausewejustwantto//workwithCollectionfeaturesCollectionc=newArrayList();for(inti=0;i<10;i++)
//publicfinalclassIntegerextendsNumber//TheIntegerclasswrapsavalueoftheprimitivetypeintinanobject.//AnobjectoftypeIntegercontainsasinglefieldwhosetypeisint.
c.add(Integer.toString(i));Iteratorit=c.iterator();while(it.hasNext())System.out.println(it.next());}}///:~Ans:0123456789Collection的機(jī)能〔參閱P333表〕iterator():產(chǎn)生一個(gè)iterator,用于枚舉含于collection內(nèi)的所有元素參加元素:add(Object),addAll(Collection)刪除元素:remove(Object),clear(),removeAll(Collection)Set和List具有同樣功能〔List還具有其他功能〕Map并不繼承自Collection隨機(jī)訪問(wèn)不包含get():因?yàn)镃ollection涵蓋Set,而Set隨機(jī)訪問(wèn)不具意義,必須使用iteratorCollection的機(jī)能〔參閱P333表〕Booleanadd(Object)
BooleanaddAll(Collection)
voidclear(
)
Booleancontains(Object)
BooleancontainsAll(Collection)
BooleanisEmpty(
)
Iteratoriterator(
)
Booleanremove(Object)
BooleanremoveAll(Collection)
Returnstrueifanyremovalsoccurred.
BooleanretainAll(Collection)
intsize(
)
Object[]toArray(
)
Object[]toArray(Object[]a)List的機(jī)能:次序(order)是重要特征ListArrayListLinkedListListIteratorProduces〔參閱P336表〕List的機(jī)能:舉例參閱List1.java〔p336〕add()、get()iterator()參閱p336表ArrayList的應(yīng)用:會(huì)自動(dòng)擴(kuò)增容量的array快速隨機(jī)訪問(wèn)LinkedList的應(yīng)用:最正確循環(huán)訪問(wèn)
?!睸tack〕和隊(duì)列〔queue〕Stack:LIFO(LastInFirstOut)Queue:FIFO(FirstInFirstOut)根據(jù)LinkedList制作queue(P339下)//:c09:Queue.java(P339下)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度車輛租賃與廣告植入合作合同
- 2025年度旅游度假村裝修升級(jí)合同
- 2025年度智能農(nóng)業(yè)物聯(lián)網(wǎng)解決方案合同-@-1
- 2025年度股權(quán)激勵(lì)與員工期權(quán)計(jì)劃股權(quán)轉(zhuǎn)讓框架協(xié)議范本
- 2025年度二零二五版高端新能源汽車安全檢測(cè)中心服務(wù)合同范本
- 2025年度網(wǎng)絡(luò)安全技術(shù)股權(quán)投資合同
- 2025年度市政公用設(shè)施施工合同證據(jù)目錄
- 2025年度地質(zhì)災(zāi)害防治護(hù)坡施工勞務(wù)分包合同
- 2025年度建筑工程安全生產(chǎn)監(jiān)理分公司合同范本
- 2025年度合伙制合同協(xié)議書(shū):人工智能產(chǎn)業(yè)合作開(kāi)發(fā)協(xié)議
- GB/T 11376-2020金屬及其他無(wú)機(jī)覆蓋層金屬的磷化膜
- 成功源于自律 主題班會(huì)課件(共34張ppt)
- 分析化學(xué)(第6版)全套課件完整版電子教案最新板
- 海上日出配套說(shuō)課PPT
- 新青島版(五年制)五年級(jí)下冊(cè)小學(xué)數(shù)學(xué)全冊(cè)導(dǎo)學(xué)案(學(xué)前預(yù)習(xí)單)
- (完整word版)重點(diǎn)監(jiān)管的危險(xiǎn)化學(xué)品名錄(完整版)
- 高級(jí)工程師電子版職稱證書(shū)在網(wǎng)上打印步驟
- 詳情頁(yè)測(cè)試文檔20220802
- 品牌形象的12個(gè)原型
- 專利糾紛行政調(diào)解辦案指南
- 經(jīng)編工藝基本樣布的分析
評(píng)論
0/150
提交評(píng)論