(2.6)-第6章 集合類程序設(shè)計程序設(shè)計_第1頁
(2.6)-第6章 集合類程序設(shè)計程序設(shè)計_第2頁
(2.6)-第6章 集合類程序設(shè)計程序設(shè)計_第3頁
(2.6)-第6章 集合類程序設(shè)計程序設(shè)計_第4頁
(2.6)-第6章 集合類程序設(shè)計程序設(shè)計_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第六章集合類常用的集合類foreach循環(huán)Iterator迭代器的使用泛型掌握List集合、Set集合、Map集合的使用以及Iterator迭代器和foreach循環(huán)的使用13了解常用的集合類2熟悉泛型的使用掌握了解熟悉學(xué)習(xí)目標(biāo)6.1集合概述6.2Collection接口6.3List接口【任務(wù)6-1】模擬KTV點歌系統(tǒng)6.4Set接口【任務(wù)6-2】模擬新浪微博用戶注冊6.5Map接口【任務(wù)6-3】斗地主小游戲之洗牌發(fā)牌?點擊查看本小節(jié)知識架構(gòu)6.6JDK5.0新特性——泛型?點擊查看本小節(jié)知識架構(gòu)?點擊查看本小節(jié)知識架構(gòu)目錄6.3List接口返回目錄6.3.16.3.26.3.3List接口簡介ArrayList集合LinkedList集合6.3.4Iterator接口6.3.5JDK5.0新特性——foreach循環(huán)知識架構(gòu)6.4Set接口返回目錄6.4.16.4.2Set接口簡介HashSet集合知識架構(gòu)6.5Map接口返回目錄6.5.16.5.26.5.3Map接口簡介HashMap集合Properties集合知識架構(gòu)前面的章節(jié)已經(jīng)介紹過在程序中可以通過數(shù)組來保存多個對象,但在某些情況下開發(fā)人員無法預(yù)先確定需要保存對象的個數(shù),此時數(shù)組將不再適用,因為數(shù)組的長度不可變。例如,要保存一個學(xué)校的學(xué)生信息,由于不停有新生來報道,同時也有學(xué)生畢業(yè)離開學(xué)校,這時學(xué)生的數(shù)目就很難確定。為了在程序中可以保存這些數(shù)目不確定的對象,JDK中提供了一系列特殊的類,這些類可以存儲任意類型的對象,并且長度可變,在Java中這些類被統(tǒng)稱為集合。集合類都位于java.util包中,在使用時一定要注意導(dǎo)包的問題,否則會出現(xiàn)異常。集合按照其存儲結(jié)構(gòu)可以分為兩大類,即單列集合Collection和雙列集合Map,這兩種集合的特點具體如下:6.1集合概述Collection:單列集合類的根接口,用于存儲一系列符合某種規(guī)則的元素,它有兩個重要的子接口,分別是List和Set。其中,List的特點是元素有序、元素可重復(fù)。Set的特點是元素?zé)o序,而且不可重復(fù)。List接口的主要實現(xiàn)類有ArrayList和LinkedList,Set接口的主要實現(xiàn)類有HashSet和TreeSet。Map:雙列集合類的根接口,用于存儲具有鍵(Key)、值(Value)映射關(guān)系的元素,每個元素都包含一對鍵值,在使用Map集合時可以通過指定的Key找到對應(yīng)的Value,例如根據(jù)一個學(xué)生的學(xué)號就可以找到對應(yīng)的學(xué)生。Map接口的主要實現(xiàn)類有HashMap和TreeMap。從上面的描述可以看出JDK中提供了豐富的集合類庫,為了便于初學(xué)者進行系統(tǒng)地學(xué)習(xí),接下來通過一張圖來描述整個集合類的繼承體系,如下圖所示。6.1集合概述Collection是所有單列集合的父接口,因此在Collection中定義了單列集合(List和Set)通用的一些方法,這些方法可用于操作所有的單列集合,如表6-1所示。表中所列舉的方法,都來自JavaAPI文檔,初學(xué)者可以通過查詢API文檔來學(xué)習(xí)這些方法的具體用法,此處列出這些方法,只是為了方便后面的學(xué)習(xí)。6.2Collection接口List接口繼承自Collection接口,是單列集合的一個重要分支,習(xí)慣性地會將實現(xiàn)了List接口的對象稱為List集合。在List集合中允許出現(xiàn)重復(fù)的元素,所有的元素是以一種線性方式進行存儲的,在程序中可以通過索引來訪問集合中的指定元素。另外,List集合還有一個特點就是元素有序,即元素的存入順序和取出順序一致。List作為Collection集合的子接口,不但繼承了Collection接口中的全部方法,而且還增加了一些根據(jù)元素索引來操作集合的特有方法,如下表所示。List接口簡介6.3List接口ArrayList是List接口的一個實現(xiàn)類,它是程序中最常見的一種集合。在ArrayList內(nèi)部封裝了一個長度可變的數(shù)組對象,當(dāng)存入的元素超過數(shù)組長度時,ArrayList會在內(nèi)存中分配一個更大的數(shù)組來存儲這些元素,因此可以將ArrayList集合看作一個長度可變的數(shù)組。ArrayList集合中大部分方法都是從父類Collection和List繼承過來的,其中add()方法和get()方法用于實現(xiàn)元素的存取。ArrayList集合

接下來通過一個案例來學(xué)習(xí)ArrayList集合如何存取元素,請查看教材文件6-1。案例代碼6.3List接口6.3.2小節(jié)中講解的ArrayList集合在查詢元素時速度很快,但在增刪元素時效率較低。為了克服這種局限性,可以使用List接口的另一個實現(xiàn)類LinkedList。該集合內(nèi)部維護了一個雙向循環(huán)鏈表,鏈表中的每一個元素都使用引用的方式來記住它的前一個元素和后一個元素,從而可以將所有的元素彼此連接起來。當(dāng)插入一個新元素時,只需要修改元素之間的這種引用關(guān)系即可,刪除一個節(jié)點也是如此。正因為這樣的存儲結(jié)構(gòu),所以LinkedList集合對于元素的增刪操作具有很高的效率,LinkedList集合添加元素和刪除元素的過程如下圖所示。LinkedList集合6.3List接口圖中,通過兩張圖描述了LinkedList集合新增元素和刪除元素的過程。其中,左圖為新增一個元素,圖中的元素1和元素2在集合中彼此為前后關(guān)系,在它們之間新增一個元素時,只需要讓元素1記住它后面的元素是新元素,讓元素2記住它前面的元素為新元素就可以了。右圖為刪除元素,要想刪除元素1與元素2之間的元素3,只需要讓元素1與元素2變成前后關(guān)系就可以了。由此可見LinkedList集合具有增刪元素效率高的特點。

接下來通過一個案例來學(xué)習(xí)這些方法的使用,請查看教材文件6-2。案例代碼6.3List接口在程序開發(fā)中,經(jīng)常需要遍歷集合中的所有元素。針對這種需求,JDK專門提供了一個接口Iterator。Iterator接口也是Java集合中的一員,但它與Collection、Map接口有所不同,Collection接口與Map接口主要用于存儲元素,而Iterator主要用于迭代訪問(即遍歷)Collection中的元素,因此Iterator對象也被稱為迭代器。Iterator接口

接下來通過一個案例來學(xué)習(xí)如何使用Iterator迭代集合中的元素,請查看教材文件6-3。案例代碼6.3List接口Iterator迭代器對象在遍歷集合時,內(nèi)部采用指針的方式來跟蹤集合中的元素,為了讓初學(xué)者能更好地理解迭代器的工作原理,接下來通過一個圖例來演示Iterator對象迭代元素的過程,如下圖所示。圖中,在調(diào)用Iterator的next()方法之前,迭代器的索引位于第一個元素之前,不指向任何元素,當(dāng)?shù)谝淮握{(diào)用迭代器的next()方法后,迭代器的索引會向后移動一位,指向第一個元素并將該元素返回,當(dāng)再次調(diào)用next()方法時,迭代器的索引會指向第二個元素并將該元素返回,依此類推,直到hasNext()方法返回false,表示到達(dá)了集合的末尾,終止對元素的遍歷。需要特別說明的是,當(dāng)通過迭代器獲取ArrayList集合中的元素時,都會將這些元素當(dāng)做Object類型來看待,如果想得到特定類型的元素,則需要進行強制類型轉(zhuǎn)換。6.3List接口雖然Iterator可以用來遍歷集合中的元素,但寫法上比較繁瑣,為了簡化書寫,從JDK5.0開始,提供了foreach循環(huán)。foreach循環(huán)是一種更加簡潔的for循環(huán),也稱增強for循環(huán)。foreach循環(huán)用于遍歷數(shù)組或集合中的元素,其具體語法格式如下:JDK5.0新特性——foreach循環(huán)

接下來通過一個案例對foreach循環(huán)進行詳細(xì)講解,請查看教材文件6-4。案例代碼6.3List接口

接下來以一個String類型的數(shù)組為例來進行演示,請查看教材文件6-5。

接下來通過一個案例來演示這種異常。假設(shè)在一個集合中存儲了學(xué)校所有學(xué)生的姓名,由于一個名為Annie的學(xué)生中途轉(zhuǎn)學(xué),這時就需要在迭代集合時找出該元素并將其刪除,請查看教材文件6-6。案例代碼腳下留心

任務(wù)案例案例代碼接下來,通過一個模擬KTV點歌系統(tǒng)來熟悉本階段的知識點,請查看教材【任務(wù)6-1】。【任務(wù)6-1】模擬KTV點歌系統(tǒng)Set接口和List接口一樣,同樣繼承自Collection接口,它與Collection接口中的方法基本一致,并沒有對Collection接口進行功能上的擴充,只是比Collection接口更加嚴(yán)格了。與List接口不同的是,Set接口中元素?zé)o序,并且都會以某種規(guī)則保證存入的元素不出現(xiàn)重復(fù)。Set接口主要有兩個實現(xiàn)類,分別是HashSet和TreeSet。其中,HashSet是根據(jù)對象的哈希值來確定元素在集合中的存儲位置,因此具有良好的存取和查找性能。TreeSet則是以二叉樹的方式來存儲元素,它可以實現(xiàn)對集合中的元素進行排序。接下來將對HashSet進行詳細(xì)的講解。Set接口簡介6.4Set接口HashSet是Set接口的一個實現(xiàn)類,它所存儲的元素是不可重復(fù)的,并且元素都是無序的。當(dāng)向HashSet集合中添加一個對象時,首先會調(diào)用該對象的hashCode()方法來計算對象的哈希值,從而確定元素的存儲位置,如果此時哈希值相同,再調(diào)用對象的equals()方法來確保該位置沒有重復(fù)元素。Set集合與List集合存取元素的方式都一樣,在此不再進行詳細(xì)的講解。Set接口簡介

接下來通過一個案例來演示HashSet集合的用法,請查看教材文件6-9。案例代碼6.4Set接口HashSet集合之所以能確保不出現(xiàn)重復(fù)的元素,是因為它在存入元素時做了很多工作。當(dāng)調(diào)用HashSet集合的add()方法存入元素時,首先調(diào)用當(dāng)前存入對象的hashCode()方法獲得對象的哈希值,然后根據(jù)對象的哈希值計算出一個存儲位置。如果該位置上沒有元素,則直接將元素存入,如果該位置上有元素存在,則會調(diào)用equals()方法讓當(dāng)前存入的元素依次和該位置上的元素進行比較,如果返回的結(jié)果為false就將該元素存入集合,返回的結(jié)果為true則說明有重復(fù)元素,就將該元素舍棄。整個存儲的流程如右圖所示。6.4Set接口接下來通過一個案例來進行演示,請查看教材文件6-10和6-11。案例代碼6.4Set接口任務(wù)案例案例代碼接下來,通過一個模擬新浪微博用戶注冊來熟悉本階段知識點,請查看教材【任務(wù)6-2】。【任務(wù)6-2】模擬新浪微博用戶注冊在現(xiàn)實生活中,每個人都有唯一的身份證號,通過身份證號可以查詢到這個人的信息,這兩者是一對一的關(guān)系。在應(yīng)用程序中,如果想存儲這種具有對應(yīng)關(guān)系的數(shù)據(jù),則需要使用JDK中提供的Map接口。Map接口是一種雙列集合,它的每個元素都包含一個鍵對象Key和值對象Value,鍵和值對象之間存在一種對應(yīng)關(guān)系,稱為映射。從Map集合中訪問元素時,只要指定了Key,就能找到對應(yīng)的Value。為了便于Map接口的學(xué)習(xí),首先來了解一下Map接口中定義的一些常用方法,如下表所示。Map接口簡介6.5Map接口HashMap集合是Map接口的一個實現(xiàn)類,它用于存儲鍵值映射關(guān)系,但必須保證不出現(xiàn)重復(fù)的鍵。接下來通過一個案例來學(xué)習(xí)HashMap的用法,請查看教材文件6-15。

通過一個案例來演示先遍歷Map集合中所有的鍵,再根據(jù)鍵獲取相應(yīng)的值的方式,請查看教材文件6-16。案例代碼HashMap集合6.5Map接口Map集合的另外一種遍歷方式是先獲取集合中的所有的映射關(guān)系,然后從映射關(guān)系中取出鍵和值。接下來通過一個案例來演示這種遍歷方式,請查看教材文件6-17。

在Map中,還提供了一個values()方法,通過這個方法可以直接獲取Map中存儲所有值的Collection集合。接下來通過一個案例來演示values()方法的使用,請查看教材文件6-18。

接下來通過一個案例來學(xué)習(xí)一下LinkedHashMap的用法,請查看教材文件6-19。案例代碼6.5Map接口Map接口中還有一個實現(xiàn)類Hashtable,它和HashMap十分相似,區(qū)別在于Hashtable是線程安全的。Hashtable存取元素時速度很慢,目前基本上被HashMap類所取代,但Hashtable類有一個子類Properties在實際應(yīng)用中非常重要。Properties主要用來存儲字符串類型的鍵和值,在實際開發(fā)中,經(jīng)常使用Properties集合來存取應(yīng)用的配置項。假設(shè)有一個文本編輯工具,要求默認(rèn)背景色是紅色,字體大小為14px,語言為中文,其配置項應(yīng)該是下面的樣子:Properties集合6.5Map接口

在程序中可以使用Properties集合對這些配置項進行存取,接下來通過一個案例來學(xué)習(xí)Properties集合的使用,請查看教材文件6-20。案例代碼6.5Map接口任務(wù)案例案例代碼接下來,通過一個斗地主小游戲之洗牌發(fā)牌來熟悉本階段的知識點,請查看教材【任務(wù)6-3】?!救蝿?wù)6-3】斗地主小游

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論