JAVA核心編程技術(shù)-前十章8_第1頁(yè)
JAVA核心編程技術(shù)-前十章8_第2頁(yè)
JAVA核心編程技術(shù)-前十章8_第3頁(yè)
JAVA核心編程技術(shù)-前十章8_第4頁(yè)
JAVA核心編程技術(shù)-前十章8_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第8章Java泛型與Java集合8.1java泛型8.3java泛型和java集合實(shí)訓(xùn)8.2java集合8.1Java泛型泛型是JavaSE5.0的新特性,泛型的本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)。這種參數(shù)類型可以用在類、接口和方法的創(chuàng)建中,分別稱為泛型類、泛型接口、泛型方法。泛型的好處是在編譯的時(shí)候檢查類型安全,并且所有的強(qiáng)制轉(zhuǎn)換都是自動(dòng)和隱式的,提高代碼的重用率。但是與方法中的參數(shù)不同,泛型的類型參數(shù)只能是類類型(包括自定義類),不能是簡(jiǎn)單類型。泛型類中的靜態(tài)方法不能訪問泛型類的類型參數(shù)。8.1.1Java泛型基本概念8.1Java泛型設(shè)置通配符的上限,Java5.0引入泛型后extends關(guān)鍵字有了另外的含義,使用extends關(guān)鍵字可以設(shè)置泛型通配符的上限,形式如下:

<?extendsA>其中的通配符?表示一個(gè)受限制的通配符,此處的“?”意為:通配符“?”只能是A類其子類作為泛型參數(shù)的泛型的的父類,而不再是任意類型參數(shù)泛型的父類。設(shè)置Java泛型通配符的下限。設(shè)置Java泛型通配符下限的關(guān)鍵字是super,此處的關(guān)鍵字super不再表示Java繼承中的超類的概念。設(shè)置Java泛型通配符下限的形式如下:

<?superA>其中泛型通配符“?”表示一個(gè)受限的泛型通配符,意為:通配符“?”只能是A類及其父類的作為參數(shù)的泛型的父類,而不再是任意類型作為參數(shù)的泛型的父類。8.1.2Java泛型類型通配符8.1Java泛型泛型不僅應(yīng)用于整個(gè)類上。同樣可以在類中包含參數(shù)化方法,而這個(gè)方法所在的類可以是泛型類,也可以不是泛型類。也就是說,是否擁有泛型方法,與其所在的類是否是泛型沒有關(guān)系。泛型方法使得該方法能夠獨(dú)立于類而產(chǎn)生變化。以下是一個(gè)基本的指導(dǎo)原則:無(wú)論何時(shí),只要你能做到,你就應(yīng)該盡量使用泛型方法。也就是說,如果使用泛型方法可以取代將整個(gè)類泛型化,那么就應(yīng)該只使用泛型方法,因?yàn)樗梢允钩绦蚋?jiǎn)單明了。另外,對(duì)于一個(gè)static的方法而言,無(wú)法訪問泛型類的類型參數(shù),所以,如果static方法需要使用泛型能力,就必須使其成為泛型方法。8.1.3Java泛型方法8.1Java泛型泛型方法的定義格式:訪問權(quán)限修飾符<T,S,…>返回類型方法名(形參列表){

}與泛型類、泛型接口中的泛型類型參數(shù)不同,泛型方法中定義的泛型形參的作用域限于該方法內(nèi)。而泛型類或泛型口中定義的泛型形參的作用域?yàn)檎麄€(gè)類或接口。此外泛型方法在使用時(shí)無(wú)需傳入泛型實(shí)參,這與泛型類和泛型接口也不同。8.1.3Java泛型方法8.1Java泛型

Java語(yǔ)言允許在使用泛型類時(shí)不指定泛型類型參數(shù)。如果沒有為泛型類指定類型參數(shù),則該類型參數(shù)被退化成一個(gè)rawtype(原始類型),退化后,默認(rèn)成該類型參數(shù)聲明時(shí)的第一個(gè)上限類型。當(dāng)把泛型類的實(shí)例賦給一個(gè)非泛型引用變量時(shí),則泛型類的泛型參數(shù)被檫除。退化成非泛型實(shí)例。8.1.4Java泛型擦出和轉(zhuǎn)換8.2Java集合

Java中的集合框架提供了一套設(shè)計(jì)優(yōu)良的接口和類,使程序員操作成批的數(shù)據(jù)或?qū)ο笤貥O為方便。這些接口和類有很多對(duì)抽象數(shù)據(jù)類型操作的API,而這是我們常用的且在數(shù)據(jù)結(jié)構(gòu)中熟知的。并且Java用面向?qū)ο蟮脑O(shè)計(jì)對(duì)這些數(shù)據(jù)結(jié)構(gòu)和算法進(jìn)行了封裝,這就極大的減化了程序員編程時(shí)的負(fù)擔(dān)。程序員也可以以這個(gè)集合框架為基礎(chǔ),定義更高級(jí)別的數(shù)據(jù)抽象,比如棧、隊(duì)列和線程安全的集合等,從而滿足自己的需要。8.2Java集合

JavaSE5.0增加了泛型支持很大程度上是為了讓集合能記住其元素的數(shù)據(jù)類型。在沒有泛型之前,一旦把一個(gè)對(duì)象“丟進(jìn)”Java集合中,集合就會(huì)忘記對(duì)象的類型。把所有元素都當(dāng)成Object類型處理。當(dāng)程序從集合中取出元素后,需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換,這種轉(zhuǎn)化使得程序代碼臃腫,轉(zhuǎn)換不當(dāng)會(huì)引發(fā)ClassCastException異常。

JavaSE5.0改寫了Java集合框架中全部接口和類,增加了泛型支持。8.2Java集合8.2.1Java集合概述8.2Java集合8.2.1Java集合概述8.2Java集合8.2.1Java集合概述8.2Java集合8.2.1Java集合概述

Java提供了非常復(fù)雜的集合類型,不易理解、掌握,通過一步簡(jiǎn)化Java集合框架非常有助于理解Java集合框架。從簡(jiǎn)化的Java集合框架圖中看出,Java集合框架主要提供了3種類型的集合和1個(gè)迭代接口:

1.Set(集):集合中的對(duì)象無(wú)排列順序,并且沒有重復(fù)的對(duì)象。它的有些實(shí)現(xiàn)類能對(duì)集合中的對(duì)象按照特定的方式進(jìn)行排序。set是最簡(jiǎn)單的一種集合,它的對(duì)象不按特定方式排序,只是簡(jiǎn)單的把對(duì)象加入集合中,就像往口袋里放東西。對(duì)集中成員的訪問和操作是通過集中對(duì)象的引用進(jìn)行的,所以集中不能有重復(fù)對(duì)象。

2.List(隊(duì)列):集合中的對(duì)象按照索引的順序排列,可以有重復(fù)的對(duì)象;可以按照對(duì)象在集合中的索引位置檢索對(duì)象。List與數(shù)組有些相似。8.2Java集合8.2.1Java集合概述

3.Map(映射):集合中的每一個(gè)元素都是一對(duì)一對(duì)的,包括一個(gè)key對(duì)象,一個(gè)Value對(duì)象(一個(gè)Key指向一個(gè)Value)。集合中沒有重復(fù)的key對(duì)象,但是vaulue對(duì)象可以重復(fù).它的有些實(shí)現(xiàn)類能對(duì)集合懷中的鍵對(duì)象進(jìn)行排序。

4.Iterator接口:Java集合框架中的Iterator接口對(duì)在編程中處理Java集合非常有用,Iterator接口封裝了底層的數(shù)據(jù)結(jié)構(gòu),向用戶提供了統(tǒng)一遍歷集合的方法。8.2Java集合8.2.2Cllection和Iterater接口方法描述boolean

add(Object

obj)向集合中添加一個(gè)對(duì)象voidclear()刪除集合中所有的對(duì)象boolean

contains(Object

o)判斷在集合中是否包含特定的對(duì)象的引用boolean

isEmpty()判斷集合是否為空Iterator

iterator()返回一個(gè)Iterator類型的對(duì)象,用它來(lái)遍歷集合boolean

remove(Object

o)從集合中刪除一個(gè)對(duì)象int

size()返回集合中元素的數(shù)量Object[]toArray()返回一個(gè)對(duì)象的數(shù)組,該數(shù)組中包含集合中所有的元素從上圖可以看出,集合中最為重要的接口是Collection,在該接口中聲明了對(duì)Java集合(List和Set)進(jìn)行操作的方法,如表:8.2Java集合8.2.2Cllection和Iterater接口而Iterator接口封裝了底層的數(shù)據(jù)結(jié)構(gòu),向用戶提供了統(tǒng)一遍歷集合的方法,在Iterator接口中聲明了如下的方法,見表:方法描述boolean

hasNext()判斷集合中是否還有下一個(gè)元素Objectnext()返回下一個(gè)元素voidremove()從集合中刪除一個(gè)由next()方法返回的元素8.2Java集合8.2.3Set接口

Set最為主要的特征是集合中的對(duì)象不按照特定的方式排序,并且沒有重復(fù)的對(duì)象。它的主要實(shí)現(xiàn)類包括:

1.HashSet類按照哈希算法來(lái)存取集合中的對(duì)象,速度較快。

2.LinkedHashSet類不僅實(shí)現(xiàn)了哈希算法,而且實(shí)現(xiàn)了鏈表的數(shù)據(jù)結(jié)構(gòu),提高了插入和刪除的功能。

3.TreeSet類實(shí)現(xiàn)了SortedSet接口,具有排序的功能。8.2Java集合8.2.4List接口

List主要特征是其元素以線型方式存儲(chǔ),集合中可以存放重復(fù)的對(duì)象List的主要實(shí)現(xiàn)類包括:ArrayList代表長(zhǎng)度可變的數(shù)組。可以對(duì)元素快速的隨機(jī)訪問。但是向ArratList插入或刪除元素的速度較慢。LinkedList在實(shí)現(xiàn)中才用了鏈表的數(shù)據(jù)接口,對(duì)順序訪問進(jìn)行了優(yōu)化。向List中插入和刪除數(shù)據(jù)的速度快,隨即訪問的速度較慢。8.2Java集合8.2.5Map接口

Map是一種把鍵對(duì)象和值對(duì)象進(jìn)行映射的集合,他的每一個(gè)元素都包含一個(gè)鍵對(duì)象,一個(gè)值對(duì)象,鍵對(duì)象相當(dāng)于值對(duì)象的索引,而且值對(duì)象仍然可以是Map類型的。它的主要實(shí)現(xiàn)類為:HashMap按照Hash算法來(lái)存取鍵對(duì)象,有很多的存取性能;為保證HashMap能正常工作。TreeMpa實(shí)現(xiàn)了SortedMap接口,能對(duì)鍵對(duì)象進(jìn)行排序。8.3Java泛型和Java集合綜合實(shí)例下面的程序?qū)崿F(xiàn)公共聊天室。程序架構(gòu)為一個(gè)服務(wù)器端和多個(gè)客戶端運(yùn)行,服務(wù)器和每個(gè)客戶端建立連接,然后接收客戶端發(fā)送的消息,再轉(zhuǎn)發(fā)個(gè)每個(gè)客戶端。因此在服務(wù)器端同時(shí)有多個(gè)Socket實(shí)例對(duì)應(yīng)每個(gè)客戶端。使用Java集合泛型類ArrayList<T>對(duì)象,存放每個(gè)客戶端的Socket,每當(dāng)由客戶連接就把生成的Socket對(duì)象放進(jìn)ArrayList對(duì)象中,當(dāng)連接到服務(wù)器中的客戶中有客戶發(fā)送消息,服務(wù)器就遍歷Arraylist

對(duì)象的成員,向?qū)?yīng)的每個(gè)客戶的Socklet轉(zhuǎn)發(fā)消息。這樣就構(gòu)成一個(gè)群聊聊天軟件。請(qǐng)按照上面的編程思路,編寫一個(gè)群聊聊天軟件服務(wù)器。程序使用TCP協(xié)議。本章小結(jié)

Java泛型與Java集合是在Java語(yǔ)言中不易掌握的內(nèi)容。本章通過簡(jiǎn)單明了的介紹,能使Java初學(xué)者迅速對(duì)Java泛型和Java集合框架有一個(gè)清晰的認(rèn)識(shí)。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論