《Java語(yǔ)言程序設(shè)計(jì)》課件第6章 Java集合、泛型和枚舉_第1頁(yè)
《Java語(yǔ)言程序設(shè)計(jì)》課件第6章 Java集合、泛型和枚舉_第2頁(yè)
《Java語(yǔ)言程序設(shè)計(jì)》課件第6章 Java集合、泛型和枚舉_第3頁(yè)
《Java語(yǔ)言程序設(shè)計(jì)》課件第6章 Java集合、泛型和枚舉_第4頁(yè)
《Java語(yǔ)言程序設(shè)計(jì)》課件第6章 Java集合、泛型和枚舉_第5頁(yè)
已閱讀5頁(yè),還剩34頁(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集合、泛型和枚舉

本章學(xué)習(xí)要點(diǎn)

了解集合概念及結(jié)構(gòu);掌握Arraylist集合的使用方法;掌握LinkedList集合的使用方法;掌握Set集合的使用方法;掌握HashSet集合的使用方法;掌握TreeSet集合的使用方法;掌握HashMap集合的使用方法;掌握TreeMap集合的使用方法;掌握Iterator的使用方法;了解泛型集合的概念及使用方法。6.1Java集合類的概念

6.1.1集合中的接口

6.1.2接口實(shí)現(xiàn)類

6.1.1集合中的接口

集合框架是一個(gè)類庫(kù)的集合,包含實(shí)現(xiàn)集合的接口。接口是集合的抽象數(shù)據(jù)類型,提供對(duì)集合中所表示的內(nèi)容進(jìn)行單獨(dú)操作的可能。常見(jiàn)的集合接口有四種。Collection:該接口是最基本的集合接口,存儲(chǔ)不唯一的無(wú)序的數(shù)據(jù)。List:該接口實(shí)現(xiàn)了Collection接口,存儲(chǔ)有序的不唯一的數(shù)據(jù)。Set:該接口實(shí)現(xiàn)了Collection接口,存儲(chǔ)無(wú)序的唯一的數(shù)據(jù)。Map:以健值對(duì)的形式存儲(chǔ)數(shù)據(jù),以鍵取值,鍵不能重復(fù),值可以重復(fù)。

6.1.1集合中的接口集合框架中的接口結(jié)構(gòu)如圖所示。

6.1.2接口實(shí)現(xiàn)類

List接口的常用實(shí)現(xiàn)類有ArrayList、LinkedList和Vector。Set接口常用的實(shí)現(xiàn)類有HashSet和TreeSet。Map接口的常用實(shí)現(xiàn)類有HashMap和TreeMap。集合框架接口中實(shí)現(xiàn)類的結(jié)構(gòu)如圖所示。

6.2JavaCollection接口Collection是最基本的集合接口,聲明了適用于Java集合(只包括Set和List)的通用方法。Map接口并不是Collection接口的子接口,但是它仍然被看作是Collection框架的一部分。

6.2JavaCollection接口Collection接口中常用的方法如下:方法名稱說(shuō)明booleanadd(Ee)向集合中添加一個(gè)元素,E是元素的數(shù)據(jù)類型booleanaddAll(Collectionc)向集合中添加集合c中的所有元素voidclear()刪除集合中的所有元素booleancontains(Objecto)判斷集合中是否存在指定元素booleancontainsAll(Collectionc)判斷集合中是否包含集合c中的所有元素booleanisEmpty()判斷集合是否為空Iterator<E>iterator()返回一個(gè)Iterator對(duì)象,用于遍歷集合中的元素booleanremove(Objecto)從集合中刪除一個(gè)指定元素booleanremoveAll(Collectionc)從集合中刪除所有在集合c中出現(xiàn)的元素booleanretainAll(Collectionc)僅僅保留集合中所有在集合c中出現(xiàn)的元素intsize()返回集合中元素的個(gè)數(shù)Object[]toArray()返回包含此集合中所有元素的數(shù)組6.3JavaList集合6.3.1

ArrayList類6.3.2LinkList類6.3.1

ArrayList類

List接口實(shí)現(xiàn)了Collection接口,它主要有兩個(gè)實(shí)現(xiàn)類:ArrayList類和LinkedList類。在List集合中允許出現(xiàn)重復(fù)元素。與Set集合不同的是,在List集合中的元素是有序的,可以根據(jù)索引位置來(lái)檢索List集合中的元素,第一個(gè)添加到List集合中的元素的索引為0,第二個(gè)為1,依此類推。6.3.1

ArrayList類ArrayList是Java集合框架中的一個(gè)重要的類,它繼承于AbstractList,實(shí)現(xiàn)了List接口,是一個(gè)長(zhǎng)度可變的集合,提供了增刪改查的功能。集合中允許null的存在。ArrayList類還是實(shí)現(xiàn)了RandomAccess接口,可以對(duì)元素進(jìn)行快速訪問(wèn)。實(shí)現(xiàn)了Serializable接口,說(shuō)明ArrayList可以被序列化,還有Cloneable接口,可以被復(fù)制。和Vector不同的是,ArrayList不是線程安全的。6.3.1

ArrayList類構(gòu)造方法如下:構(gòu)造方法說(shuō)明ArrayList()默認(rèn)提供初始容量為10的空列表。ArrayList(intinitialCapacity)構(gòu)造一個(gè)具有指定初始容量的空列表。ArrayList(Collection<?extendsE>c)構(gòu)造一個(gè)包含指定collection的元素6.3.1

ArrayList類常用方法:方法名稱說(shuō)明Eget(intindex)獲取此集合中指定索引位置的元素,E為集合中元素的數(shù)據(jù)類型intindex(Objecto)返回此集合中第一次出現(xiàn)指定元素的索引,如果此集合不包含該元素,則返回-1intlastIndexOf(Objecto)返回此集合中最后一次出現(xiàn)指定元素的索引,如果此集合不包含該元素,則返回-1Eset(intindex,Eelement)將此集合中指定索引位置的元素修改為element參數(shù)指定的對(duì)象。此方法返回此集合中指定索引位置的原元素List<E>subList(intfromlndex,inttolndex)返回一個(gè)新的集合,新集合中包含fromlndex和tolndex索引之間的所有元素。包含fromlndex處的元素,不包含tolndex索引處的元素6.3.2LinkList類

ArrayList基于動(dòng)態(tài)數(shù)組的實(shí)現(xiàn),它長(zhǎng)于隨機(jī)訪問(wèn)元素,但是在中間插入和移除元素時(shí)較慢。LinkedList基于鏈表實(shí)現(xiàn),在List中間進(jìn)行插入和刪除的代價(jià)較低,提供了優(yōu)化的順序訪問(wèn)。LinkedList在隨機(jī)訪問(wèn)方面相對(duì)比較慢,但是它的特性集較ArrayList更大。6.3.2LinkList類常用方法方法名稱說(shuō)明voidaddFirst(Ee)將指定元素添加到此集合的開(kāi)頭voidaddLast(Ee)將指定元素添加到此集合的末尾EgetFirst()返回此集合的第一個(gè)元素EgetLast()返回此集合的最后一個(gè)元素EremoveFirst()刪除此集合中的第一個(gè)元素EremoveLast()刪除此集合中的最后一個(gè)元素6.4JavaSet集合6.4.1HashSet類6.4.2TreeSet類6.4.1HashSet類

Set集合也實(shí)現(xiàn)了Collection接口,它主要有兩個(gè)實(shí)現(xiàn)類:HashSet類和TreeSet類。Set集合中的對(duì)象不按特定的方式排序,只是簡(jiǎn)單地把對(duì)象加入集合,集合中不能包含重復(fù)的對(duì)象,并且最多只允許包含一個(gè)null元素。HashSet查找某個(gè)對(duì)象時(shí),首先用hashCode()方法計(jì)算出這個(gè)對(duì)象的Hash碼,然后再根據(jù)Hash碼到相應(yīng)的存儲(chǔ)區(qū)域用equals()方法查找,從而提高了效率。由于是集合,所以同一個(gè)對(duì)象只能有一個(gè)。6.4.1HashSet類常用方法方法名稱說(shuō)明booleanadd(E

e)將指定的元素添加到此集合(如果尚未存在)voidclear()從此集合中刪除所有元素booleancontains(Object

o)如果此集合包含指定元素,則返回truebooleanisEmpty()如果此集合不包含元素,則返回trueIterator<E>iterator()返回此集合中元素的迭代器booleanremove(Object

o)如果存在則從該集合中刪除指定的元素intsize()返回此集合中的元素?cái)?shù)(其基數(shù))Spliterator<E>spliterator()在此集合中的元素上創(chuàng)建late-binding和故障快速Spliterator6.4.2TreeSet類

TreeSet類同時(shí)實(shí)現(xiàn)了Set接口和SortedSet接口。SortedSet接口是Set接口的子接口,可以實(shí)現(xiàn)對(duì)集合進(jìn)行自然排序,因此使用TreeSet類實(shí)現(xiàn)的Set接口默認(rèn)情況下是自然排序的,這里的自然排序指的是升序排序。6.4.2TreeSet類構(gòu)造方法:方法說(shuō)明TreeSet()構(gòu)造一個(gè)新的,空的樹(shù)組,根據(jù)其元素的自然排序進(jìn)行排序TreeSet(Collection<?extendsE>c)構(gòu)造一個(gè)包含指定集合中的元素的新樹(shù)集,根據(jù)其元素的自然排序進(jìn)行排序TreeSet(Comparator<?superE>comparator)構(gòu)造一個(gè)新的,空的樹(shù)集,根據(jù)指定的比較器進(jìn)行排序TreeSet(SortedSet<E>s)構(gòu)造一個(gè)包含相同元素的新樹(shù),并使用與指定排序集相同的順序6.4.2TreeSet類常用方法:方法名稱說(shuō)明booleanadd(E

e)將指定元素添加到此集合BooleanaddAll(Collection<?extends

E>

c)將指定集合中的所有元素添加到此集合E

ceiling(E

e)返回此集合中最小元素大于或等于給定元素,如果沒(méi)有此元素,則返回nullVoidclear()從此集合中刪除所有元素Comparator<?super

E>comparator()返回用于對(duì)該集合中的元素進(jìn)行排序的比較器,或null,如果此集合使用其元素的naturalorderingbooleancontains(Object

o)如果此集合包含指定的元素,則返回trueIterator<E>descendingIterator()以降序返回該集合中的元素的迭代器。6.5JavaMap集合6.5.1HashMap類6.5.2TreeMap類6.5.1HashMap類

Map是一種鍵-值對(duì)(key-value)集合,Map集合中的每一個(gè)元素都包含一個(gè)鍵對(duì)象和一個(gè)值對(duì)象。其中,鍵對(duì)象不允許重復(fù),而值對(duì)象可以重復(fù),并且值對(duì)象還可以是Map類型的,就像數(shù)組中的元素還可以是數(shù)組一樣。Map接口主要有兩個(gè)實(shí)現(xiàn)類:HashMap類和TreeMap類。其中,HashMap類按哈希算法來(lái)存取鍵對(duì)象,而TreeMap類可以對(duì)鍵對(duì)象進(jìn)行排序。6.5.1HashMap類HashMap是一個(gè)最常用的Map,它根據(jù)鍵的hashCode值存儲(chǔ)數(shù)據(jù),根據(jù)鍵可以直接獲取它的值,具有很快的訪問(wèn)速度。構(gòu)造方法:方法說(shuō)明HashMap()構(gòu)造一個(gè)空的HashMap,默認(rèn)初始容量(16)和默認(rèn)負(fù)載系數(shù)(0.75)HashMap(intinitialCapacity)構(gòu)造一個(gè)空的HashMap具有指定的初始容量和默認(rèn)負(fù)載因子(0.75)HashMap(intinitialCapacity,floatloadFactor)構(gòu)造一個(gè)空的HashMap具有指定的初始容量和負(fù)載因子HashMap(Map<?extendsK,?extendsV>m)構(gòu)造一個(gè)新的HashMap與指定的相同的映射Map6.5.1HashMap類常用方法方法名稱說(shuō)明voidclear()從這張地圖中刪除所有的映射booleancontainsKey(Objectkey)如果此映射包含指定鍵的映射,則返回trueBooleancontainsValue(Objectvalue)如果此地圖將一個(gè)或多個(gè)鍵映射到指定值,則返回trueSet<Map.Entry<K,V>>entrySet()返回此地圖中包含的映射的Set視圖V

get(Objectkey)返回到指定鍵所映射的值,或null如果此映射包含該鍵的映射BooleanisEmpty()如果此地圖不包含鍵值映射,則返回trueSet<K>keySet()返回此地圖中包含的鍵的Set視圖V

put(Kkey,Vvalue)將指定的值與此映射中的指定鍵相關(guān)聯(lián)V

remove(Objectkey)從該地圖中刪除指定鍵的映射(如果存在)Intsize()返回此地圖中鍵值映射的數(shù)量6.5.2TreeMap類

TreeMap基于紅黑樹(shù)(Red-Blacktree)實(shí)現(xiàn)。該映射根據(jù)其鍵的自然順序進(jìn)行排序,或者根據(jù)創(chuàng)建映射時(shí)提供的Comparator進(jìn)行排序,具體取決于使用的構(gòu)造方法。構(gòu)造方法:方法名稱說(shuō)明TreeMap()使用其鍵的自然排序構(gòu)造一個(gè)新的空樹(shù)狀圖TreeMap(Comparator<?superK>comparator)構(gòu)造一個(gè)新的,空的樹(shù)圖,按照給定的比較器排序TreeMap(Map<?extendsK,?extendsV>m)構(gòu)造一個(gè)新的樹(shù)狀圖,其中包含與給定地圖相同的映射,根據(jù)其鍵的自然順序進(jìn)行排序TreeMap(SortedMap<K,?extendsV>m)構(gòu)造一個(gè)包含相同映射并使用與指定排序映射相同順序的新樹(shù)映射6.5.2TreeMap類常用方法:方法名稱說(shuō)明voidclear()從這張地圖中刪除所有的映射booleancontainsKey(Objectkey)如果此地圖將一個(gè)或多個(gè)鍵映射到指定值,則返回trueSet<Map.Entry<K,V>>entrySet()返回此地圖中包含的映射的Set視圖V

get(Objectkey)返回到指定鍵所映射的值,或null如果此映射包含該鍵的映射Set<K>keySet()返回此地圖中包含的鍵的Set視圖V

put(Kkey,Vvalue)將指定的值與此映射中的指定鍵相關(guān)聯(lián)V

remove(Objectkey)從此TreeMap中刪除此鍵的映射(如果存在)intsize()返回此地圖中鍵值映射的數(shù)量

6.6泛型集合

6.6.1泛型的概念

6.6.2泛型類

6.6.3泛型接口

6.6.4泛型方法

6.6.1泛型的概念

泛型(Generictype或者generics)是對(duì)Java語(yǔ)言的類型系統(tǒng)的一種擴(kuò)展,以支持創(chuàng)建可以按類型進(jìn)行參數(shù)化的類??梢园杨愋蛥?shù)看作是使用參數(shù)化類型時(shí)指定的類型的一個(gè)占位符,就像方法的形式參數(shù)是運(yùn)行時(shí)傳遞的值的占位符一樣。例如,Map類允許您向一個(gè)Map添加任意類的對(duì)象,即使最常見(jiàn)的情況是在給定映射(map)中保存某個(gè)特定類型(比如String)的對(duì)象。因?yàn)镸ap.get()被定義為返回Object,所以一般必須將Map.get()的結(jié)果強(qiáng)制類型轉(zhuǎn)換為期望的類型,如下面的代碼所示:Mapm=newHashMap();m.put("key","blarg");Strings=(String)m.get("key");

6.6.1泛型的概念理想情況下,您可能會(huì)得出這樣一個(gè)觀點(diǎn),即m是一個(gè)Map,它將String鍵映射到String值。這可以讓您消除代碼中的強(qiáng)制類型轉(zhuǎn)換,同時(shí)獲得一個(gè)附加的類型檢查層,該檢查層可以防止有人將錯(cuò)誤類型的鍵或值保存在集合中。這就是泛型所做的工作。消除強(qiáng)制類型轉(zhuǎn)換。泛型的一個(gè)附帶好處是,消除源代碼中的許多強(qiáng)制類型轉(zhuǎn)換。這使得代碼更加可讀,并且減少了出錯(cuò)機(jī)會(huì)。泛型有三種使用方式,分別為:泛型類、泛型接口、泛型方法6.6.2泛型類

泛型類型用于類的定義中,被稱為泛型類。通過(guò)泛型可以完成對(duì)一組類的操作對(duì)外開(kāi)放相同的接口。最典型的就是各種容器類,如:List、Set、Map。泛型類的最基本寫法。publicclassclass_name<data_type1,data_type2,…>{}可以定義一個(gè)或多個(gè)泛型類型,例如。classGenericA<T>{}或者classGenericA<K,T>{}6.6.3泛型接口

泛型接口與泛型類的定義及使用基本相同。泛型接口常被用在各種類的生產(chǎn)器中,可以看一個(gè)例子:定義一個(gè)泛型接口publicinterfaceGenerator<T>{publicTnext();}6.6.3泛型接口當(dāng)實(shí)現(xiàn)泛型接口的類,未傳入泛型實(shí)參時(shí):classFruitGenerator<T>implementsGenerator<T>{@OverridepublicTnext(){returnnull;}}6.6.3泛型接口未傳入泛型實(shí)參時(shí),與泛型類的定義相同,在聲明類的時(shí)候,需將泛型的聲明也一起加到類中,即:classFruitGenerator<T>implementsGenerator<T>如果不聲明泛型,如:classFruitGeneratorimplementsGenerator<T>編譯器會(huì)報(bào)錯(cuò):"Unknownclass"6.6.3泛型接口當(dāng)實(shí)現(xiàn)泛型接口的類,傳入泛型實(shí)參時(shí):publicclassFruitGeneratorimplementsGenerator<String>{privateString[]fruits=newString[]{"Apple","Banana","Pear"};@OverridepublicStringnext(){Randomrand=newRandom();returnfruits[rand.nextInt(3)];}}6.6.3泛型接口傳入泛型實(shí)參時(shí):定義一個(gè)生產(chǎn)器實(shí)現(xiàn)這個(gè)接口,雖然我們只創(chuàng)建了一個(gè)泛型接口Generator<T

溫馨提示

  • 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)論