Thinking-in-Java-09(持有你的對(duì)象)_第1頁(yè)
Thinking-in-Java-09(持有你的對(duì)象)_第2頁(yè)
Thinking-in-Java-09(持有你的對(duì)象)_第3頁(yè)
Thinking-in-Java-09(持有你的對(duì)象)_第4頁(yè)
Thinking-in-Java-09(持有你的對(duì)象)_第5頁(yè)
已閱讀5頁(yè),還剩39頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論