Java的集合類課件_第1頁
Java的集合類課件_第2頁
Java的集合類課件_第3頁
Java的集合類課件_第4頁
Java的集合類課件_第5頁
已閱讀5頁,還剩71頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第9章Java的集合類學(xué)習(xí)重點:集合類與普通數(shù)組的區(qū)別各種集合類的特點及適用條件炊飲拇擬苯膚曬迫腕鰓反蘸鈔拒醋尼敢袱窖卵蕩羞滴領(lǐng)毅升釉絮回用陽撬第9章Java的集合類第9章Java的集合類第9章Java的集合類學(xué)習(xí)重點:炊飲拇擬苯膚曬迫腕鰓反蘸1第9章Java的集合類

9.1集合類概述

9.2原集合類

9.2.1數(shù)組

9.2.2Vector類

9.2.3BitSet類

9.2.4Stack類

9.2.5Hashtable類

9.3新集合類

9.3.1Collection

9.3.2List

9.3.3Set

9.3.4Map

9.3.5Utilities

9.4練習(xí)題閑雙慘扯括懸籃地討掀沼修嘆捂泉斯讓盂鋅涂惹慶惋謾兩屎巢母??绐M冉第9章Java的集合類第9章Java的集合類第9章Java的集合類29.1集合類概述集合類是用來存放某類對象的。我們知道,數(shù)組是有固定長度的,在定義數(shù)組的時候,就需要確定這個數(shù)組的內(nèi)存空間,但很多時候我們不能確定需要存放多少元素,這時數(shù)組就顯得很不方便,這時就需要使用集合類。集合類有一個共同特點,就是它們只容納對象(實際上是對象名,既指向地址的指針),這一點和數(shù)組不同,數(shù)組可以容納對象和簡單數(shù)據(jù)。集合類容納的對象都是Object類的實例,一旦把一個對象置入集合類中,它的類信息將丟失,也就是說,集合類中容納的都是指向Object類對象的指針。勒餞懇夏刑嫌幀澤墟季燎渡逸躁政藕瀉坎錳灑幕淋利燴匆柵被隱況風(fēng)叁令第9章Java的集合類第9章Java的集合類9.1集合類概述集合類是用來存放某類對象的。我們知道,數(shù)3

9.2原集合類9.2.1數(shù)組例9.1數(shù)組中容納對象和簡單數(shù)據(jù)這個程序中把對象和簡單數(shù)據(jù)分別作為數(shù)組的元素,然后對它們分別操作

程序代碼上面的程序中我們用同樣的格式設(shè)計了兩種數(shù)組:對象數(shù)組和簡單數(shù)據(jù)類型數(shù)組,以進(jìn)行比較。數(shù)組a只是初始化成一個null的對象名(指針),此時,編譯器會禁止我們對這個指針進(jìn)行任何實際操作。數(shù)組b被初始化成指向由Weeble類對象構(gòu)成的一個數(shù)組,但那個數(shù)組里實際并未放置任何Weeble對象,所以數(shù)組b的元素都是空指針,不能直接使用,然而,我們?nèi)匀豢梢圆樵兡莻€數(shù)組的大小,因為b指向的是一個合法對象。這個程序中還用到對象間的賦值,對象間賦值傳遞的是指針。孕外孺柯蹬席忠濱鏡飼慚寡榔獻(xiàn)或家眼條關(guān)趁底贓娩彬踴磕激紋捍淮偵補第9章Java的集合類第9章Java的集合類

9.2原集合類4例9.2對象數(shù)組的傳遞這個程序中我們用一個數(shù)組來存放香味名(字符串對象),然后從這個數(shù)組中隨機(jī)抽出香味名,形成20個隨機(jī)排列,并輸出。計算中每次都形成一個新的對象數(shù)組,并在不同的方法中傳遞。程序代碼flavorSet()方法創(chuàng)建了一個名為results的String數(shù)組。該數(shù)組的大小為n,具體數(shù)值取決于傳遞給方法的自變量。隨后,它從數(shù)組flav里隨機(jī)挑選一些香料(Flavor),并將它們置入results里,并最終返回results。返回數(shù)組與返回其他任何對象沒什么區(qū)別,返回的都是一個指針。另一方面,當(dāng)flavorSet()隨機(jī)挑選香料的時候,它需要保證以前挑選過的香料不會再次出現(xiàn)。main()能顯示出20個完整的香味名集合,所以我們看到flavorSet()每次都用一個隨機(jī)順序選擇香料。埠祭鞋書稻何戎貶訣恕饅胳揖散霍覽妮塹庫茶熔骸魏香汾眩揣襲慚攣冪路第9章Java的集合類第9章Java的集合類例9.2對象數(shù)組的傳遞這個程序中我們用一個數(shù)組來存59.2.2Vector類

該類實現(xiàn)了可變數(shù)組。和數(shù)組一樣,它的元素可通過下標(biāo)進(jìn)行訪問。Vector類的對象通過capacity和capacityIncrement兩個值來改變集合的容量,capacity指示集合最多能容納的元素個數(shù),capacityIncrement指示每次增加多少容量,而不是一個一個增加的。峪做組穢銀筐舜辟鑷厭才干沂遏棺狐盯達(dá)活棠及凡所埋民種噓沸陶叢勢梁第9章Java的集合類第9章Java的集合類9.2.2Vector類該類實現(xiàn)了可變數(shù)組。和數(shù)組一6這個類有3個屬性、多個構(gòu)造函數(shù)和許多其他方法。下面列舉幾個方法:voidaddElement(Objectobj)——在集合的最后增加一個元素voidadd(intindex,Objectelement)——在指定位置增加一個元素ObjectelementAt(intindex)——返回指定位置的元素voidinsertElementAt(Objectobj,intindex)——在指定位置插入元素voidremoveElementAt(intindex)——刪除指定位置的元素intcatacity()——返回當(dāng)前容量intsize()——返回集合的元素個數(shù)嗜訴吵尖誹覺袱亡旨爛肉睹奄翠癱迢迢墓紅位藕玖蘭監(jiān)寫坡哀庶嚎嚴(yán)遲注第9章Java的集合類第9章Java的集合類這個類有3個屬性、多個構(gòu)造函數(shù)和許多其他方法。下面列舉幾個方7例9.3集合中元素必須是同類的對象程序代碼這個程序中只有在執(zhí)行((Cat)cats.elementAt(7)).print();的時候拋出例外。在這個程序中也看到了重新造型的格式:(Cat)cats.elementAt(i),因為一個集合的元素是一個Object類的對象,所以必須把它強制轉(zhuǎn)換成Cat類的對象進(jìn)行操作。退芳南拾努蚜柬鐘凰匝讓贊河佐趾給宦塞礎(chǔ)稻魄畜菇適窘粉頌濫乓餅娩犯第9章Java的集合類第9章Java的集合類例9.3集合中元素必須是同類的對象程序代碼退芳南拾努蚜柬8能不能把元素轉(zhuǎn)換成Dog類?

答案是肯定的,把程序中的最后兩句換成如下形式,就能把最后一個元素輸出。for(inti=cats.size()-1;i>=0;i--)((Dog)cats.elementAt(i)).print();這時的輸出結(jié)果為:Dog#7Exceptioninthread"main"java.lang.ClassCastException:CatatCatsAndDogs.main(CatsAndDogs.java:31)怎闡羹蘭假殖牛礫釉七匙詭斬鐳職酗鋼擲光鼓吁僵拇蜒椽殆兌犢煞褒騎江第9章Java的集合類第9章Java的集合類能不能把元素轉(zhuǎn)換成Dog類?答案是肯定的,把程序中的最9程序中我們用到了size()這個方法來確定元素的個數(shù),其實有另一個方法可以讓程序自動檢查元素的類型以及集合的最后一個該類型元素,這就是Enumeration(枚舉接口),它是一個簡單的反復(fù)器(iterator),它能實現(xiàn)對集合的遍歷。實現(xiàn)枚舉的對象必須通過Vector類的方法elements()來創(chuàng)建,這個方法返回反映當(dāng)前集合內(nèi)容的實現(xiàn)枚舉的對象。然后通過枚舉的方法實現(xiàn)對集合的遍歷:ObjectnextElement()

//獲得下一個元素,定一次調(diào)用返回定一個元素bealoonhasMoreElements()//檢查集合中是否有更多的元素檄作缽順疾喜喊煎況民攙梳壘恕矢嘯撇濟(jì)跪隴麗牲妄參約沁就蟬陸迫酷魔第9章Java的集合類第9章Java的集合類程序中我們用到了size()這個方法來確定元素的個數(shù),其實有10我們就用這兩個方法來代替上面的一部分程序,其中改動import語句和主類如下:importjava.util.*;… //這一部分不變 publicclassCatsAndDogs{ publicstaticvoidmain(String[]args){ Vectorcats=newVector(); for(inti=0;i<7;i++) cats.addElement(newCat(i)); cats.addElement(newDog(7)); //以下部分是更新的代碼

Enumeratione=cats.elements(); //創(chuàng)建Enumeration對象e while(e.hasMoreElements()) //使用e來完成集合的遍歷 ((Cat)e.nextElement()).print(); }}這個程序的輸出結(jié)果同原先的程序,其中的黑體部分就是更改部分。使用Enumeration,我們不必關(guān)心集合中的元素數(shù)量。所有工作均由hasMoreElements()和nextElement()自動照管了??弪}漾囊律爐衡杖拼襯僧栓慈憎護(hù)輸空洽盡甥惜各鎊設(shè)井冶錢婪痹丈弊谷第9章Java的集合類第9章Java的集合類我們就用這兩個方法來代替上面的一部分程序,其中改動impor119.2.3BitSet類這個類實際是由“二進(jìn)制位”構(gòu)成的一個Vector,即這個Vector集合中的元素都是false或true,默認(rèn)值都為false。此外,BitSet的最小長度是一個長整數(shù)(Long)的長度:64位,這意味著假如我們準(zhǔn)備保存比它更小的數(shù)據(jù),如8位數(shù)據(jù),那么BitSet就顯得浪費了。湘吳戴艙騙侵貞泊委飄肺蹈德阻泊源央導(dǎo)碟適臣忍硼幾面屬皚辜紉奇展寐第9章Java的集合類第9章Java的集合類9.2.3BitSet類這個類實際是由“二進(jìn)制位”12它有以下幾個特殊的方法:publicvoidand(BitSetset)——進(jìn)行邏輯運算,還有or()和xor()publicintlength()——有效邏輯位的位數(shù)publicintsize()——返回集合中的元素個數(shù),最小為64publicvoidset(int

bitIndex)——把指定位置的值置為truepublicvoidclear(int

bitIndex)——把指定位置的值置為falsepublicbooleanget(int

bitIndex)——得到制定位置的值概銅砷差毛摻疫嘶卞伎牛烽起僳虧捻細(xì)拱幢蠕孫栗傲六謝舜氈脅符請成林第9章Java的集合類第9章Java的集合類它有以下幾個特殊的方法:publicvoidand(Bi13例9.4使用BitSet類這段程序的目的是隨機(jī)產(chǎn)生一個數(shù)字串,然后逐一判斷它每一個二進(jìn)制位是否為1,是則在BitSet的相應(yīng)位置上置true,否則置false888程序代碼雀馳烙厄促赦苫未厘歇菇役力職窮裙款昏紅偶殿沉努砌該久閃驕刻仿掐杭第9章Java的集合類第9章Java的集合類例9.4使用BitSet類這段程序的目的是隨機(jī)產(chǎn)生一14

9.2.4Stack類Stack類是Vector類的子類,它是一個“后入先出”(LIFO,last-in-first-out)的集合。Stack的意思就是堆棧,堆棧就像一個桶,只有一個口,放入和取出都用這個口,最后放入的東西能最先拿出,最先放入的東西只能最后拿出。通常在堆棧中存入數(shù)據(jù)稱為“壓入”(push),取出數(shù)據(jù)成為“彈出”(pop)。由于壓入和彈出都在堆??谶M(jìn)行,所以位置很確定,這和其他集合不同。和其他所有Java集合一樣,我們壓入和彈出的都是對象,所以必須對自己彈出的東西進(jìn)行造型。琢繭座眾稈制敢塵摩侄鹿喪謬儈勸汰齊頸需緣犁東巋仇框已堡唁凸肌勸駐第9章Java的集合類第9章Java的集合類

9.2.4Stack類Stack類是Vecto15這個類增加了5個方法:publicObject

push(Object

item)——把形參對象壓入堆棧publicObject

pop()——彈出第一個對象publicObject

peek()——并不取出的情況下,看定一個對象publicbooleanempty()——是否為空publicintsearch(Object

o)——檢查第一個出現(xiàn)形參對象的位置橡胰餓逆墊銹囪視佑犁即逞州琳瘤雀維接赤送粳拷鞏鵲頃揣畏套衛(wèi)卵滿壞第9章Java的集合類第9章Java的集合類這個類增加了5個方法:publicObjectpush(16例9.5堆棧類的使用

這個程序的目的是將英文的12個月存放到一個Stack中,然后按順序打印出來。程序代碼從這個程序的結(jié)果可以清楚地看到,先壓入的后彈出,這個類的對象也可以使用Vector類的方法,如addElement()和elementAt()等。嫡拯翻鏈銀砍殃混鋇粥嫌醚梨鄉(xiāng)赴叭詢哆篙彼僅疙乙吸廁霉鬃霖踩鞘踞縱第9章Java的集合類第9章Java的集合類例9.5堆棧類的使用這個程序的目的是將英文的12個179.2.5Hashtable類這個類是字典類(Dictionary)的子類,字典類是抽象類,它達(dá)到的目的是通過一個鍵(key)來查找元素,這和實際的查字典及其相似。整具熔橋費襟堅黍組蘇隨戀妥入滄侈雜吁訂舊博蔡輝耗毋略濁妝漠柵辦劫第9章Java的集合類第9章Java的集合類9.2.5Hashtable類這個類是字典類(Di18該抽象類有許多方法,size()告訴我們其中包含了多少元素,isEmpty()判斷是否包含了元素(是則為true),put(Objectkey,Objectvalue)添加一個值,并將其同一個鍵關(guān)聯(lián)起來,get(Objectkey)獲得與某個鍵對應(yīng)的值,而remove(ObjectKey)用于從列表中刪除“鍵-值”對。還可以使用枚舉技術(shù),keys()產(chǎn)生對鍵的一個枚舉(Enumeration),而elements()產(chǎn)生對所有值的一個枚舉。Hashtable類不僅實現(xiàn)父類的方法,還有自己的方法,下面這個方法就是用來檢查形參對象是否是一個散列表的鍵:

publicbooleancontainsKey(Object

key)玲株虛縮鹿秘數(shù)詹級甭翟飾裴兢犢欄甕辟竅驅(qū)罷沖掌撓哥碗吸麥巴公窟葦?shù)?章Java的集合類第9章Java的集合類該抽象類有許多方法,size()告訴我們其中包含了多少元素,19例9.6用Hashtable來檢查隨機(jī)數(shù)的隨機(jī)性下面的程序?qū)㈦S機(jī)整數(shù)對應(yīng)在0~20之間,然后生成10000個隨機(jī)數(shù),看它們在0~20間的分布如何。

程序代碼

這個程序中我們建立一個Hashtable表ht,其中的“鍵-值”對是隨機(jī)數(shù)(r)與統(tǒng)計數(shù)(Counter.i),其中的隨機(jī)數(shù)是鍵,統(tǒng)計數(shù)是值。遜汛擲軟喪階饅飄額啞芹藐樁謙雇橇宣俞憑球跌點甚擴(kuò)元罩蚜諾違鴿撾票第9章Java的集合類第9章Java的集合類例9.6用Hashtable來檢查隨機(jī)數(shù)的隨機(jī)性下面209.3新集合類集合類繼承關(guān)系圖

事實上這個集合族中分兩個部分。一個是Collection系,它是以下標(biāo)訪問元素的集合,它實際含有List和Set兩個組件。另一個是Map系,它是一種映射,通過鍵來訪問元素的集合(可見Hashtable是應(yīng)該屬于這個系的),隆蝸柴乞果恨藐丟拖樊濘乃肋昭措催軍觀調(diào)寶膿襟初忘熒埠磺墑鎂撐咋問第9章Java的集合類第9章Java的集合類9.3新集合類集合類繼承關(guān)系圖隆蝸柴乞果恨藐丟拖樊濘乃219.3.1CollectionCollection的所有方法:publicintsize()publicbooleanisEmpty()publicbooleancontains(Object

o)——是否含有形參對象publicIterator

iterator()——產(chǎn)生一個反復(fù)器,其中包含了該collection對象中所有的元素,類似于一個枚舉類型的對象publicObject[]toArray()——返回一個包含所有元素的對象數(shù)組publicObject[]toArray(Object[]

a)——把所有元素放入a[]中publicbooleanadd(Object

o)——集合中加入對象,成功時返回truepublicbooleanremove(Object

o) publicbooleancontainsAll(Collection

c)——判斷c是否為子集publicbooleanaddAll(Collection

c)publicbooleanremoveAll(Collection

c) ——清空指定集合publicbooleanretainAll(Collection

c)——刪除所有c中沒有的元素publicvoidclear()——清空集合publicbooleanequals(Object

o)——比較兩個對象是否相同publicinthashCode()——獲取集合的hashcode邑謊龐豬廬忍塑狙整繩宛葵檢淀演低剪跋鵲諒蹈挾喜悟種曼靈獺縛峰臘豬第9章Java的集合類第9章Java的集合類9.3.1CollectionCollection的所有22例9.7Collection的使用這個程序非常簡單,只是用來演示大部分的Collection含有的方法,因為這些方法在它的“子類”中都能使用,所以先熟悉這些方法。由于Collection是一個接口,所以它的實例只能是它“子類”的對象。程序代碼隘鵝閏糟暮椅倍懂憊液釩庇盯換卞拯箕弟柄憨舒爐遠(yuǎn)鑄頂水尖瑞躥少芹歲第9章Java的集合類第9章Java的集合類例9.7Collection的使用這個程序非常簡單239.3.2ListList的明顯特征是它的元素有一個確定的順序,它比Collection多了一些指定位置增刪改的方法。它能產(chǎn)生ListIterator的對象。實現(xiàn)它的類有ArrayList和ArrayList。ArrayList內(nèi)存中是順序存儲的(元素的內(nèi)存位置緊鄰),而LinkedList內(nèi)存中是以鏈表(數(shù)據(jù)結(jié)構(gòu)中的內(nèi)容,這里不再講)的形式存儲,所以ArrayList比較適用于經(jīng)常遍歷訪問,ArrayList比較適用于經(jīng)常在中間進(jìn)行增刪改操作。ArrayList是被用來代替Vector的一個通用的可變數(shù)組類,因而,Java1.2以后的編程應(yīng)多使用ArrayList。襟袱騁椽伴人挑腮奔諜膘首考湃嫁磨側(cè)肖兵盂罩翟嘲刀鄒萍冕鴕港熟搬廈第9章Java的集合類第9章Java的集合類9.3.2ListList的明顯特征是它的元249.3.3SetSet與Collection有完全相同的對外接口,實際上就是一個Collection,但添加到Set的每個元素都必須是獨一無二的,Set不會添加重復(fù)的元素。添加到Set里的對象必須定義equals()方法,以提供算法來判斷欲添加進(jìn)來的對象是否與已經(jīng)存在的某對象相等,從而建立對象的惟一性。一個Set不能保證自己可按任何特定的順序維持自己的元素。實現(xiàn)Set的類有HashSet和TreeSet,HashSet是以hash桶來存放元素,能實現(xiàn)快速查找,TreeSet是一種有順序的集合,一般以字典式升序排列,或以創(chuàng)建Set時指定的Comparator來排序,內(nèi)存中以二叉樹型結(jié)構(gòu)存儲。由于TreeSet實現(xiàn)了SortedSet,所以有幾個特殊的方法,例如:publicObjectfirst()——獲取第一個即排在最低位的一個publicObjectlast()——獲取排在toElement之前的元素組成的SortedSet褐浚滄元啃蓖尸玫到儡車頗占亞邯雀祥灰濰度翁譽曬藥詞抒函互阿抽窩鴨第9章Java的集合類第9章Java的集合類9.3.3SetSet與Collection有完全相同的25例9.8set中元素的惟一性下面的程序演示Set中的元素是惟一的,即使多次添加同一個值,集合中依然是原來幾個。這個程序使用了Collection類中的方法程序代碼

與縮腰瀝怠役頰襪伶活流蹤梅溺芭矢少答軀寒佰乒晦退蝗艦埂飲笑蕾騾扮第9章Java的集合類第9章Java的集合類例9.8set中元素的惟一性與縮腰瀝怠役頰襪伶活流蹤梅溺269.3.4MapMap這種接口用來維持很多“鍵-值”對,以便通過一個鍵查找相應(yīng)的值。HashMap基于一個散列表實現(xiàn)(用它代替Hashtable)。針對“鍵-值”對的插入和檢索,這種形式具有較好的執(zhí)行性能。TreeMap

在一個二叉樹的基礎(chǔ)上實現(xiàn)。查看鍵或者“鍵-值”對時,它們會按固定的順序排列(取決于Comparator)。TreeMap最大的好處就是我們得到的是已排好序的結(jié)果。TreeMap是含有subMap()方法的惟一一種Map,利用它可以返回樹的一部分。WeakHashMap是一種特殊的HashMap,對于那些弱鍵,垃圾收集器會自動刪除,因而,對應(yīng)的“鍵-值”對可能會丟失。節(jié)奏麥懲卯蓄懼斤摩淪廁臂萎幣戚司軟葬盛扒簡農(nóng)罰權(quán)討城骨酸悄紙閻燥第9章Java的集合類第9章Java的集合類9.3.4MapMap這種接口用來維持很多“鍵-值”對,27例9.9Map的用法

這個程序先定義兩個字符串?dāng)?shù)組,用這些字符串構(gòu)造Map,并把它的鍵和值分別輸出,然后遍歷這個Map,再使用Map的一些方法。程序代碼

可見,雖然testData1被放入了兩次,但Map對象中并沒有重復(fù)的數(shù)據(jù),當(dāng)程序調(diào)用:Mapm2=fill(newTreeMap(),testData2); m.putAll(m2);我們又可以看到這樣的結(jié)果:Size=10,Keys:Dopey|Bashful|Belligerent|Sleepy|Lazy|Happy|Comatose|Grumpy|Sneezy|Doc|可見testData2中的數(shù)據(jù)也放進(jìn)來了。卵贛休廢播徊帶鈴批旋坪吵刀春測晴這舌楔花摳講敵戚輾誤矽槐立雷坯諒第9章Java的集合類第9章Java的集合類例9.9Map的用法

這個程序先定義兩個字符串?dāng)?shù)組,用這28

9.3.5Utilities1.ArraysArrays類為所有基本數(shù)據(jù)類型的數(shù)組提供了一個重載的sort()和binarySearch(),它們也可用于String和Object。亂谷艱運隋曲掙馳侍巾這住浪閨抒盤洱藤函獎季弗嚼河貞鴛芹靈哦嘴努宵第9章Java的集合類第9章Java的集合類

9.3.5Utilities1.Arrays亂谷艱29例9.10數(shù)組工具的使用

這個程序定義了兩個重載的方法來產(chǎn)生隨機(jī)字符串,兩個重載的打印方法,main()方法中用隨機(jī)類產(chǎn)生隨機(jī)數(shù)進(jìn)行排序和查找,而后用已定義的隨機(jī)字符串類產(chǎn)生字符串,排序并查找。程序代碼對于字符,如果用默認(rèn)的比較器,會區(qū)分大小寫。翻囂肺拘瘡內(nèi)鳴施封陰賢佑氣保斷剎諾掖啪教廊丈殿悔砌暑呼楓焊扛晾杰第9章Java的集合類第9章Java的集合類例9.10數(shù)組工具的使用

這個程序定義了兩個重載的方30例9.11自己定義比較方法的sort()

這個程序中把接收的對象轉(zhuǎn)化為字符串,并全部改成小寫后進(jìn)行比較,就不區(qū)分大小寫了。程序代碼這個例子的一個結(jié)果為

木澈程鵬九妹潘厘適賂楊贊悲旨摘抱部皂汀奴捐皿款縫艷渠營廂咳棍墓指第9章Java的集合類第9章Java的集合類例9.11自己定義比較方法的sort()

木澈程31例9.12比較對象來排序這個程序定義了一個比較對象的比較器,可能讀者會懷疑如何能比較對象,事實上,只是把對象的某一內(nèi)容(如名稱、屬性值等)進(jìn)行比較,讀者也可以自己定義。程序代碼程序的結(jié)果

救淮刨宗月瑩餞撼之梁膜伏歐攬烏謙械凝劈環(huán)戍騁搞矯釘致嗅慰咕駛憤詠第9章Java的集合類第9章Java的集合類例9.12比較對象來排序這個程序定義了一個比較對象的322.CollectionsCollections類可用與數(shù)組相同的形式排序和搜索一個列表(List)。用于排序和搜索列表的靜態(tài)方法包含在類Collections中,但它們擁有與Arrays中差不多的方法名。sort(List)用于對一個實現(xiàn)了Comparable的對象列表進(jìn)行排序。binarySearch(List,Object)用于查找列表中的某個對象。sort(List,Comparator)利用一個“比較器”對一個列表進(jìn)行排序。binarySearch(List,Object,Comparator)則用于查找那個列表中的一個對象。伍含暮漱掖欽謅晤豫朵史猾虜蔚件并碴問鏈氧窺泌吵空起凱謀裳茂世氖蓑第9章Java的集合類第9章Java的集合類2.CollectionsCollections類可33例9.13排序工具示范

這個例子利用了上面的CompClass,AlphaComp和Collectionx以及Arrayx來示范Collections中的排序工具。程序用了兩個不同的ArrayList對象來演示Collections中的排序和查找方法。程序代碼執(zhí)行結(jié)果

底帽涌酷父姐歪昂諧侍薩聶倒只蒲盔痕灤檀識騾嶄樣塢蹬目畏捍弛避精滇第9章Java的集合類第9章Java的集合類例9.13排序工具示范底帽涌酷父姐歪昂諧侍薩聶倒只蒲盔痕349.4練習(xí)題1.選擇題(1)Vector類的對象中的元素可以是:A. int型整數(shù)B. 浮點數(shù)C. 對象D. 屬性憂連稈期攀蚌案渤帽蛋抓叮竟倆叮依品咳棉欺婿俠沽革騎恫貯祟谷嘻懲列第9章Java的集合類第9章Java的集合類9.4練習(xí)題1.選擇題憂連稈期攀蚌案渤帽蛋抓叮竟倆35(2) BitSot的最小長度是:A. 8位B. 16位C. 32位D. 64位凄捐臆田紉建侯稀辟趴裔矩圃定淤帕錄握八主稻鞘哨迫如暈齋嬸艱縛論鍘第9章Java的集合類第9章Java的集合類(2) BitSot的最小長度是:凄捐臆田紉建侯稀辟趴裔矩圃362.程序閱讀題(1) 閱讀下列程序,加入輸入?yún)?shù)abracopopstq,會得到什么樣的結(jié)果?importjava.util.*;publicclassFreq{privatestaticfinalIntegerONE=newInteger(1);publicstaticvoidmain(Stringargs[]){Mapm=newTreeMap();for(inti=0;i<args.length;i++){Integerfreq=(Integer)m.get(args[i]);m.put(args[i],(freq==null?ONE:newInteger(Value()+1)));}System.out.println(m.size()+"distinctwordsdetected:");System.out.println(m);}}座賽哺柏邵氛戴助卒廬衰纜黍狗狠卵恐螺漬僥屠芽炸夏懈姐鵝靳槍汲族浸第9章Java的集合類第9章Java的集合類2.程序閱讀題(1) 閱讀下列程序,加入輸入?yún)?shù)abr373.編程題(1)編制一個程序,用Class類來獲取所有關(guān)于HashSet類的信息。(2)用ArrarList來實現(xiàn)一個列表,然后用Collections類進(jìn)行排序、搜索。用不同類型的元素進(jìn)行試驗。(3)用HashMap來檢查隨機(jī)數(shù)的分布情況。多芬驢制括懶琺雷瞅窿兼階剮叉函奎嘴豆癰暈鑒緝魁拖彥喘攪松劫畸旱蹈第9章Java的集合類第9章Java的集合類3.編程題多芬驢制括懶琺雷瞅窿兼階剮叉函奎嘴豆癰暈鑒緝魁拖38第9章Java的集合類學(xué)習(xí)重點:集合類與普通數(shù)組的區(qū)別各種集合類的特點及適用條件炊飲拇擬苯膚曬迫腕鰓反蘸鈔拒醋尼敢袱窖卵蕩羞滴領(lǐng)毅升釉絮回用陽撬第9章Java的集合類第9章Java的集合類第9章Java的集合類學(xué)習(xí)重點:炊飲拇擬苯膚曬迫腕鰓反蘸39第9章Java的集合類

9.1集合類概述

9.2原集合類

9.2.1數(shù)組

9.2.2Vector類

9.2.3BitSet類

9.2.4Stack類

9.2.5Hashtable類

9.3新集合類

9.3.1Collection

9.3.2List

9.3.3Set

9.3.4Map

9.3.5Utilities

9.4練習(xí)題閑雙慘扯括懸籃地討掀沼修嘆捂泉斯讓盂鋅涂惹慶惋謾兩屎巢母??绐M冉第9章Java的集合類第9章Java的集合類第9章Java的集合類409.1集合類概述集合類是用來存放某類對象的。我們知道,數(shù)組是有固定長度的,在定義數(shù)組的時候,就需要確定這個數(shù)組的內(nèi)存空間,但很多時候我們不能確定需要存放多少元素,這時數(shù)組就顯得很不方便,這時就需要使用集合類。集合類有一個共同特點,就是它們只容納對象(實際上是對象名,既指向地址的指針),這一點和數(shù)組不同,數(shù)組可以容納對象和簡單數(shù)據(jù)。集合類容納的對象都是Object類的實例,一旦把一個對象置入集合類中,它的類信息將丟失,也就是說,集合類中容納的都是指向Object類對象的指針。勒餞懇夏刑嫌幀澤墟季燎渡逸躁政藕瀉坎錳灑幕淋利燴匆柵被隱況風(fēng)叁令第9章Java的集合類第9章Java的集合類9.1集合類概述集合類是用來存放某類對象的。我們知道,數(shù)41

9.2原集合類9.2.1數(shù)組例9.1數(shù)組中容納對象和簡單數(shù)據(jù)這個程序中把對象和簡單數(shù)據(jù)分別作為數(shù)組的元素,然后對它們分別操作

程序代碼上面的程序中我們用同樣的格式設(shè)計了兩種數(shù)組:對象數(shù)組和簡單數(shù)據(jù)類型數(shù)組,以進(jìn)行比較。數(shù)組a只是初始化成一個null的對象名(指針),此時,編譯器會禁止我們對這個指針進(jìn)行任何實際操作。數(shù)組b被初始化成指向由Weeble類對象構(gòu)成的一個數(shù)組,但那個數(shù)組里實際并未放置任何Weeble對象,所以數(shù)組b的元素都是空指針,不能直接使用,然而,我們?nèi)匀豢梢圆樵兡莻€數(shù)組的大小,因為b指向的是一個合法對象。這個程序中還用到對象間的賦值,對象間賦值傳遞的是指針。孕外孺柯蹬席忠濱鏡飼慚寡榔獻(xiàn)或家眼條關(guān)趁底贓娩彬踴磕激紋捍淮偵補第9章Java的集合類第9章Java的集合類

9.2原集合類42例9.2對象數(shù)組的傳遞這個程序中我們用一個數(shù)組來存放香味名(字符串對象),然后從這個數(shù)組中隨機(jī)抽出香味名,形成20個隨機(jī)排列,并輸出。計算中每次都形成一個新的對象數(shù)組,并在不同的方法中傳遞。程序代碼flavorSet()方法創(chuàng)建了一個名為results的String數(shù)組。該數(shù)組的大小為n,具體數(shù)值取決于傳遞給方法的自變量。隨后,它從數(shù)組flav里隨機(jī)挑選一些香料(Flavor),并將它們置入results里,并最終返回results。返回數(shù)組與返回其他任何對象沒什么區(qū)別,返回的都是一個指針。另一方面,當(dāng)flavorSet()隨機(jī)挑選香料的時候,它需要保證以前挑選過的香料不會再次出現(xiàn)。main()能顯示出20個完整的香味名集合,所以我們看到flavorSet()每次都用一個隨機(jī)順序選擇香料。埠祭鞋書稻何戎貶訣恕饅胳揖散霍覽妮塹庫茶熔骸魏香汾眩揣襲慚攣冪路第9章Java的集合類第9章Java的集合類例9.2對象數(shù)組的傳遞這個程序中我們用一個數(shù)組來存439.2.2Vector類

該類實現(xiàn)了可變數(shù)組。和數(shù)組一樣,它的元素可通過下標(biāo)進(jìn)行訪問。Vector類的對象通過capacity和capacityIncrement兩個值來改變集合的容量,capacity指示集合最多能容納的元素個數(shù),capacityIncrement指示每次增加多少容量,而不是一個一個增加的。峪做組穢銀筐舜辟鑷厭才干沂遏棺狐盯達(dá)活棠及凡所埋民種噓沸陶叢勢梁第9章Java的集合類第9章Java的集合類9.2.2Vector類該類實現(xiàn)了可變數(shù)組。和數(shù)組一44這個類有3個屬性、多個構(gòu)造函數(shù)和許多其他方法。下面列舉幾個方法:voidaddElement(Objectobj)——在集合的最后增加一個元素voidadd(intindex,Objectelement)——在指定位置增加一個元素ObjectelementAt(intindex)——返回指定位置的元素voidinsertElementAt(Objectobj,intindex)——在指定位置插入元素voidremoveElementAt(intindex)——刪除指定位置的元素intcatacity()——返回當(dāng)前容量intsize()——返回集合的元素個數(shù)嗜訴吵尖誹覺袱亡旨爛肉睹奄翠癱迢迢墓紅位藕玖蘭監(jiān)寫坡哀庶嚎嚴(yán)遲注第9章Java的集合類第9章Java的集合類這個類有3個屬性、多個構(gòu)造函數(shù)和許多其他方法。下面列舉幾個方45例9.3集合中元素必須是同類的對象程序代碼這個程序中只有在執(zhí)行((Cat)cats.elementAt(7)).print();的時候拋出例外。在這個程序中也看到了重新造型的格式:(Cat)cats.elementAt(i),因為一個集合的元素是一個Object類的對象,所以必須把它強制轉(zhuǎn)換成Cat類的對象進(jìn)行操作。退芳南拾努蚜柬鐘凰匝讓贊河佐趾給宦塞礎(chǔ)稻魄畜菇適窘粉頌濫乓餅娩犯第9章Java的集合類第9章Java的集合類例9.3集合中元素必須是同類的對象程序代碼退芳南拾努蚜柬46能不能把元素轉(zhuǎn)換成Dog類?

答案是肯定的,把程序中的最后兩句換成如下形式,就能把最后一個元素輸出。for(inti=cats.size()-1;i>=0;i--)((Dog)cats.elementAt(i)).print();這時的輸出結(jié)果為:Dog#7Exceptioninthread"main"java.lang.ClassCastException:CatatCatsAndDogs.main(CatsAndDogs.java:31)怎闡羹蘭假殖牛礫釉七匙詭斬鐳職酗鋼擲光鼓吁僵拇蜒椽殆兌犢煞褒騎江第9章Java的集合類第9章Java的集合類能不能把元素轉(zhuǎn)換成Dog類?答案是肯定的,把程序中的最47程序中我們用到了size()這個方法來確定元素的個數(shù),其實有另一個方法可以讓程序自動檢查元素的類型以及集合的最后一個該類型元素,這就是Enumeration(枚舉接口),它是一個簡單的反復(fù)器(iterator),它能實現(xiàn)對集合的遍歷。實現(xiàn)枚舉的對象必須通過Vector類的方法elements()來創(chuàng)建,這個方法返回反映當(dāng)前集合內(nèi)容的實現(xiàn)枚舉的對象。然后通過枚舉的方法實現(xiàn)對集合的遍歷:ObjectnextElement()

//獲得下一個元素,定一次調(diào)用返回定一個元素bealoonhasMoreElements()//檢查集合中是否有更多的元素檄作缽順疾喜喊煎況民攙梳壘恕矢嘯撇濟(jì)跪隴麗牲妄參約沁就蟬陸迫酷魔第9章Java的集合類第9章Java的集合類程序中我們用到了size()這個方法來確定元素的個數(shù),其實有48我們就用這兩個方法來代替上面的一部分程序,其中改動import語句和主類如下:importjava.util.*;… //這一部分不變 publicclassCatsAndDogs{ publicstaticvoidmain(String[]args){ Vectorcats=newVector(); for(inti=0;i<7;i++) cats.addElement(newCat(i)); cats.addElement(newDog(7)); //以下部分是更新的代碼

Enumeratione=cats.elements(); //創(chuàng)建Enumeration對象e while(e.hasMoreElements()) //使用e來完成集合的遍歷 ((Cat)e.nextElement()).print(); }}這個程序的輸出結(jié)果同原先的程序,其中的黑體部分就是更改部分。使用Enumeration,我們不必關(guān)心集合中的元素數(shù)量。所有工作均由hasMoreElements()和nextElement()自動照管了??弪}漾囊律爐衡杖拼襯僧栓慈憎護(hù)輸空洽盡甥惜各鎊設(shè)井冶錢婪痹丈弊谷第9章Java的集合類第9章Java的集合類我們就用這兩個方法來代替上面的一部分程序,其中改動impor499.2.3BitSet類這個類實際是由“二進(jìn)制位”構(gòu)成的一個Vector,即這個Vector集合中的元素都是false或true,默認(rèn)值都為false。此外,BitSet的最小長度是一個長整數(shù)(Long)的長度:64位,這意味著假如我們準(zhǔn)備保存比它更小的數(shù)據(jù),如8位數(shù)據(jù),那么BitSet就顯得浪費了。湘吳戴艙騙侵貞泊委飄肺蹈德阻泊源央導(dǎo)碟適臣忍硼幾面屬皚辜紉奇展寐第9章Java的集合類第9章Java的集合類9.2.3BitSet類這個類實際是由“二進(jìn)制位”50它有以下幾個特殊的方法:publicvoidand(BitSetset)——進(jìn)行邏輯運算,還有or()和xor()publicintlength()——有效邏輯位的位數(shù)publicintsize()——返回集合中的元素個數(shù),最小為64publicvoidset(int

bitIndex)——把指定位置的值置為truepublicvoidclear(int

bitIndex)——把指定位置的值置為falsepublicbooleanget(int

bitIndex)——得到制定位置的值概銅砷差毛摻疫嘶卞伎牛烽起僳虧捻細(xì)拱幢蠕孫栗傲六謝舜氈脅符請成林第9章Java的集合類第9章Java的集合類它有以下幾個特殊的方法:publicvoidand(Bi51例9.4使用BitSet類這段程序的目的是隨機(jī)產(chǎn)生一個數(shù)字串,然后逐一判斷它每一個二進(jìn)制位是否為1,是則在BitSet的相應(yīng)位置上置true,否則置false888程序代碼雀馳烙厄促赦苫未厘歇菇役力職窮裙款昏紅偶殿沉努砌該久閃驕刻仿掐杭第9章Java的集合類第9章Java的集合類例9.4使用BitSet類這段程序的目的是隨機(jī)產(chǎn)生一52

9.2.4Stack類Stack類是Vector類的子類,它是一個“后入先出”(LIFO,last-in-first-out)的集合。Stack的意思就是堆棧,堆棧就像一個桶,只有一個口,放入和取出都用這個口,最后放入的東西能最先拿出,最先放入的東西只能最后拿出。通常在堆棧中存入數(shù)據(jù)稱為“壓入”(push),取出數(shù)據(jù)成為“彈出”(pop)。由于壓入和彈出都在堆??谶M(jìn)行,所以位置很確定,這和其他集合不同。和其他所有Java集合一樣,我們壓入和彈出的都是對象,所以必須對自己彈出的東西進(jìn)行造型。琢繭座眾稈制敢塵摩侄鹿喪謬儈勸汰齊頸需緣犁東巋仇框已堡唁凸肌勸駐第9章Java的集合類第9章Java的集合類

9.2.4Stack類Stack類是Vecto53這個類增加了5個方法:publicObject

push(Object

item)——把形參對象壓入堆棧publicObject

pop()——彈出第一個對象publicObject

peek()——并不取出的情況下,看定一個對象publicbooleanempty()——是否為空publicintsearch(Object

o)——檢查第一個出現(xiàn)形參對象的位置橡胰餓逆墊銹囪視佑犁即逞州琳瘤雀維接赤送粳拷鞏鵲頃揣畏套衛(wèi)卵滿壞第9章Java的集合類第9章Java的集合類這個類增加了5個方法:publicObjectpush(54例9.5堆棧類的使用

這個程序的目的是將英文的12個月存放到一個Stack中,然后按順序打印出來。程序代碼從這個程序的結(jié)果可以清楚地看到,先壓入的后彈出,這個類的對象也可以使用Vector類的方法,如addElement()和elementAt()等。嫡拯翻鏈銀砍殃混鋇粥嫌醚梨鄉(xiāng)赴叭詢哆篙彼僅疙乙吸廁霉鬃霖踩鞘踞縱第9章Java的集合類第9章Java的集合類例9.5堆棧類的使用這個程序的目的是將英文的12個559.2.5Hashtable類這個類是字典類(Dictionary)的子類,字典類是抽象類,它達(dá)到的目的是通過一個鍵(key)來查找元素,這和實際的查字典及其相似。整具熔橋費襟堅黍組蘇隨戀妥入滄侈雜吁訂舊博蔡輝耗毋略濁妝漠柵辦劫第9章Java的集合類第9章Java的集合類9.2.5Hashtable類這個類是字典類(Di56該抽象類有許多方法,size()告訴我們其中包含了多少元素,isEmpty()判斷是否包含了元素(是則為true),put(Objectkey,Objectvalue)添加一個值,并將其同一個鍵關(guān)聯(lián)起來,get(Objectkey)獲得與某個鍵對應(yīng)的值,而remove(ObjectKey)用于從列表中刪除“鍵-值”對。還可以使用枚舉技術(shù),keys()產(chǎn)生對鍵的一個枚舉(Enumeration),而elements()產(chǎn)生對所有值的一個枚舉。Hashtable類不僅實現(xiàn)父類的方法,還有自己的方法,下面這個方法就是用來檢查形參對象是否是一個散列表的鍵:

publicbooleancontainsKey(Object

key)玲株虛縮鹿秘數(shù)詹級甭翟飾裴兢犢欄甕辟竅驅(qū)罷沖掌撓哥碗吸麥巴公窟葦?shù)?章Java的集合類第9章Java的集合類該抽象類有許多方法,size()告訴我們其中包含了多少元素,57例9.6用Hashtable來檢查隨機(jī)數(shù)的隨機(jī)性下面的程序?qū)㈦S機(jī)整數(shù)對應(yīng)在0~20之間,然后生成10000個隨機(jī)數(shù),看它們在0~20間的分布如何。

程序代碼

這個程序中我們建立一個Hashtable表ht,其中的“鍵-值”對是隨機(jī)數(shù)(r)與統(tǒng)計數(shù)(Counter.i),其中的隨機(jī)數(shù)是鍵,統(tǒng)計數(shù)是值。遜汛擲軟喪階饅飄額啞芹藐樁謙雇橇宣俞憑球跌點甚擴(kuò)元罩蚜諾違鴿撾票第9章Java的集合類第9章Java的集合類例9.6用Hashtable來檢查隨機(jī)數(shù)的隨機(jī)性下面589.3新集合類集合類繼承關(guān)系圖

事實上這個集合族中分兩個部分。一個是Collection系,它是以下標(biāo)訪問元素的集合,它實際含有List和Set兩個組件。另一個是Map系,它是一種映射,通過鍵來訪問元素的集合(可見Hashtable是應(yīng)該屬于這個系的),隆蝸柴乞果恨藐丟拖樊濘乃肋昭措催軍觀調(diào)寶膿襟初忘熒埠磺墑鎂撐咋問第9章Java的集合類第9章Java的集合類9.3新集合類集合類繼承關(guān)系圖隆蝸柴乞果恨藐丟拖樊濘乃599.3.1CollectionCollection的所有方法:publicintsize()publicbooleanisEmpty()publicbooleancontains(Object

o)——是否含有形參對象publicIterator

iterator()——產(chǎn)生一個反復(fù)器,其中包含了該collection對象中所有的元素,類似于一個枚舉類型的對象publicObject[]toArray()——返回一個包含所有元素的對象數(shù)組publicObject[]toArray(Object[]

a)——把所有元素放入a[]中publicbooleanadd(Object

o)——集合中加入對象,成功時返回truepublicbooleanremove(Object

o) publicbooleancontainsAll(Collection

c)——判斷c是否為子集publicbooleanaddAll(Collection

c)publicbooleanremoveAll(Collection

c) ——清空指定集合publicbooleanretainAll(Collection

c)——刪除所有c中沒有的元素publicvoidclear()——清空集合publicbooleanequals(Object

o)——比較兩個對象是否相同publicinthashCode()——獲取集合的hashcode邑謊龐豬廬忍塑狙整繩宛葵檢淀演低剪跋鵲諒蹈挾喜悟種曼靈獺縛峰臘豬第9章Java的集合類第9章Java的集合類9.3.1CollectionCollection的所有60例9.7Collection的使用這個程序非常簡單,只是用來演示大部分的Collection含有的方法,因為這些方法在它的“子類”中都能使用,所以先熟悉這些方法。由于Collection是一個接口,所以它的實例只能是它“子類”的對象。程序代碼隘鵝閏糟暮椅倍懂憊液釩庇盯換卞拯箕弟柄憨舒爐遠(yuǎn)鑄頂水尖瑞躥少芹歲第9章Java的集合類第9章Java的集合類例9.7Collection的使用這個程序非常簡單619.3.2ListList的明顯特征是它的元素有一個確定的順序,它比Collection多了一些指定位置增刪改的方法。它能產(chǎn)生ListIterator的對象。實現(xiàn)它的類有ArrayList和ArrayList。ArrayList內(nèi)存中是順序存儲的(元素的內(nèi)存位置緊鄰),而LinkedList內(nèi)存中是以鏈表(數(shù)據(jù)結(jié)構(gòu)中的內(nèi)容,這里不再講)的形式存儲,所以ArrayList比較適用于經(jīng)常遍歷訪問,ArrayList比較適用于經(jīng)常在中間進(jìn)行增刪改操作。ArrayList是被用來代替Vector的一個通用的可變數(shù)組類,因而,Java1.2以后的編程應(yīng)多使用ArrayList。襟袱騁椽伴人挑腮奔諜膘首考湃嫁磨側(cè)肖兵盂罩翟嘲刀鄒萍冕鴕港熟搬廈第9章Java的集合類第9章Java的集合類9.3.2ListList的明顯特征是它的元629.3.3SetSet與Collection有完全相同的對外接口,實際上就是一個Collection,但添加到Set的每個元素都必須是獨一無二的,Set不會添加重復(fù)的元素。添加到Set里的對象必須定義equals()方法,以提供算法來判斷欲添加進(jìn)來的對象是否與已經(jīng)存在的某對象相等,從而建立對象的惟一性。一個Set不能保證自己可按任何特定的順序維持自己的元素。實現(xiàn)Set的類有HashSet和TreeSet,HashSet是以hash桶來存放元素,能實現(xiàn)快速查找,TreeSet是一種有順序的集合,一般以字典式升序排列,或以創(chuàng)建Set時指定的Comparator來排序,內(nèi)存中以二叉樹型結(jié)構(gòu)存儲。由于TreeSet實現(xiàn)了SortedSet,所以有幾個特殊的方法,例如:publicObjectfirst()——獲取第一個即排在最低位的一個publicObjectlast()——獲取排在toElement之前的元素組成的SortedSet褐浚滄元啃蓖尸玫到儡車頗占亞邯雀祥灰濰度翁譽曬藥詞抒函互阿抽窩鴨第9章Java的集合類第9章Java的集合類9.3.3SetSet與Collection有完全相同的63例9.8set中元素的惟一性下面的程序演示Set中的元素是惟一的,即使多次添加同一個值,集合中依然是原來幾個。這個程序使用了Collection類中的方法程序代碼

與縮腰瀝怠役頰襪伶活流蹤梅溺芭矢少答軀寒佰乒晦退蝗艦埂飲笑蕾騾扮第9章Java的集合類第9章Java的集合類例9.8set中元素的惟一性與縮腰瀝怠役頰襪伶活流蹤梅溺649.3.4MapMap這種接口用來維持很多“鍵-值”對,以便通過一個鍵查找相應(yīng)的值。HashMap基于一個散列表實現(xiàn)(用它代替Hashtable)。針對“鍵-值”對的插入和檢索,這種形式具有較好的執(zhí)行性能。TreeMap

在一個二叉樹的基礎(chǔ)上實現(xiàn)。查看鍵或者“鍵-值”對時,它們會按固定的順序排列(取決于Comparator)。TreeMap最大的好處就是我們得到的是已排好序的結(jié)果。TreeMap是含有subMap()方法的惟一一種Map,利用它可以返回樹的一部分。WeakHashMap是一種特殊的HashMap,對于那些弱鍵,垃圾收集器會自動刪除,因而,對應(yīng)的“鍵-值”對可能會丟失。節(jié)奏麥懲卯蓄懼斤摩淪廁臂萎幣戚司軟葬盛扒簡農(nóng)罰權(quán)討城骨酸悄紙閻燥第9章Java的集合類第9章Java的集合類9.3.4MapMap這種接口用來維持很多“鍵-值”對,65例9.9Map的用法

這個程序先定義兩個字符串?dāng)?shù)組,用這些字符串構(gòu)造Map,并把它的鍵和值分別輸出,然后遍歷這個Map,再使用Map的一些方法。程序代碼

可見,雖然testData1被放入了兩次,但Map對象中并沒有重復(fù)的數(shù)據(jù),當(dāng)程序調(diào)用:Mapm2=fill(newTreeMap(),testData2); m.putAll(m2);我們又可以看到這樣的結(jié)果:Size=10,Keys:Dopey|Bashful|Belligerent|Sleepy|Lazy|Happy|Comatose|Grumpy|Sneezy|Doc|可見testData2中的數(shù)據(jù)也放進(jìn)來了。卵贛休廢播徊帶鈴批旋坪吵刀春測晴這舌楔花摳講敵戚輾誤矽槐立雷坯諒第9章Java的集合類第9章Java的集合類例9.9Map的用法

這個程序先定義兩個字符串?dāng)?shù)組,用這66

9.3.5Utilities1.ArraysArrays類為所有基本數(shù)據(jù)類型的數(shù)組提供了一個重載的sort()和binarySearch(),它們也可用于String和Object。亂谷

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論