Java 程序設(shè)計(jì)基礎(chǔ)第15章泛型與集合框架_第1頁(yè)
Java 程序設(shè)計(jì)基礎(chǔ)第15章泛型與集合框架_第2頁(yè)
Java 程序設(shè)計(jì)基礎(chǔ)第15章泛型與集合框架_第3頁(yè)
Java 程序設(shè)計(jì)基礎(chǔ)第15章泛型與集合框架_第4頁(yè)
Java 程序設(shè)計(jì)基礎(chǔ)第15章泛型與集合框架_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

2023/10/1JAVA程序設(shè)計(jì)根底第15章泛型與集合框架導(dǎo)讀2023/10/1主要內(nèi)容泛型鏈表堆棧散列映射樹集樹映射概述2023/10/1在jdk1.2之后,Java提供了實(shí)現(xiàn)常見數(shù)據(jù)結(jié)構(gòu)的類,這些實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)的類通稱為Java集合框架。在JDK1.5后,Java集合框架開始支持泛型,本章首先介紹泛型,然后講解常見數(shù)據(jù)結(jié)構(gòu)類的用法。

2023/10/1§15.1泛型泛型〔Generics〕是在JDK1.5中推出的,其主要目的是可以建立具有類型平安的集合框架,如鏈表、散列映射等數(shù)據(jù)結(jié)構(gòu)。2023/10/1§15.1.1泛型類聲明可以使用“class名稱<泛型列表>〞聲明一個(gè)類,為了和普通的類有所區(qū)別,這樣聲明的類稱作泛型類,如:classPeople<E>其中People是泛型類的名稱,E是其中的泛型,也就是說我們并沒有指定E是何種類型的數(shù)據(jù),它可以是任何對(duì)象或接口,但不能是根本類型數(shù)據(jù)。2023/10/1§15.1.2使用泛型類聲明對(duì)象泛型類聲明和創(chuàng)立對(duì)象時(shí),類名后多了一對(duì)“<>〞,而且必須要用具體的類型替換“<>〞中的泛型。例如:Cone<Circle>coneOne;coneOne=newCone<Circle>(newCircle());

例子1(Example15_1.java

,Cone.java

,Rect.java

,Circle.java

)中,聲明了一個(gè)泛型類:Cone,一個(gè)Cone對(duì)象計(jì)算體積時(shí),只關(guān)心它的底是否能計(jì)算面積,并不關(guān)心底的類型。運(yùn)行效果如圖15.1。

2023/10/1§15.2鏈表鏈表是由假設(shè)干個(gè)稱作節(jié)點(diǎn)的對(duì)象組成的一種數(shù)據(jù)結(jié)構(gòu),每個(gè)節(jié)點(diǎn)含有一個(gè)數(shù)據(jù)和下一個(gè)節(jié)點(diǎn)的引用。2023/10/1§15.2.1LinkedList<E>泛型類◆LinkedList<E>泛型類創(chuàng)立的對(duì)象以鏈表結(jié)構(gòu)存儲(chǔ)數(shù)據(jù),習(xí)慣上稱LinkedList類創(chuàng)立的對(duì)象為鏈表對(duì)象。例如,LinkedList<String>mylist=newLinkedList<String>();創(chuàng)立一個(gè)空雙鏈表。◆add(Eobj)向鏈表依次增加節(jié)點(diǎn)2023/10/1§15.2.2常用方法◆

LinkedList<E>泛型類實(shí)現(xiàn)Lis<E>泛型接口中的一些常用方法。

publicbooleanadd(Eelement)

向鏈表末尾添加一個(gè)新的節(jié)點(diǎn),該節(jié)點(diǎn)中的數(shù)據(jù)是參數(shù)elememt指定的數(shù)據(jù)。publicvoidadd(intindex,Eelement)

向鏈表的指定位置添加一個(gè)新的節(jié)點(diǎn),該節(jié)點(diǎn)中的數(shù)據(jù)是參數(shù)elememt指定的數(shù)據(jù)。publicvoidclear()

刪除鏈表的所有節(jié)點(diǎn),使當(dāng)前鏈表成為空鏈表。publicEremove(intindex)

刪除指定位置上的節(jié)點(diǎn)。publicbooleanremove(Eelement)

刪除首次出現(xiàn)含有數(shù)據(jù)elemen的節(jié)點(diǎn)。publicEget(intindex)

得到鏈表中指定位置處節(jié)點(diǎn)中的數(shù)據(jù)。

……◆

LinkedList<E>泛型類本身新增加的一些常用方法publicvoidaddFirst(Eelement)

向鏈表的頭添加新節(jié)點(diǎn),該節(jié)點(diǎn)中的數(shù)據(jù)是參數(shù)elememt指定的數(shù)據(jù)。publicvoidaddLast(Eelement)

向鏈表的末尾添加新節(jié)點(diǎn),該節(jié)點(diǎn)中的數(shù)據(jù)是參數(shù)elememt指定的數(shù)據(jù)。publicEgetFirst()

得到鏈表中第一個(gè)節(jié)點(diǎn)中的數(shù)據(jù)。publicEgetLast()

得到鏈表中最后一個(gè)節(jié)點(diǎn)中的數(shù)據(jù)。publicEremoveFirst()

刪除第一個(gè)節(jié)點(diǎn),并返回這個(gè)節(jié)點(diǎn)中的數(shù)據(jù)。

……2023/10/1§15.2.3遍歷鏈表◆當(dāng)用戶需要遍歷集合中的對(duì)象時(shí),應(yīng)當(dāng)使用該集合提供的迭代器,而不是讓集合本身來遍歷其中的對(duì)象。由于迭代器遍歷集合的方法在找到集合中的一個(gè)對(duì)象的同時(shí),也得到待遍歷的后繼對(duì)象的引用,因此迭代器可以快速地遍歷集合?!翩湵韺?duì)象可以使用iterator()方法獲取一個(gè)Iterator對(duì)象,該對(duì)象就是針對(duì)當(dāng)前鏈表的迭代器。例子2比較了使用迭代器遍歷鏈表和get(intindex)方法遍歷鏈表的所用時(shí)間,運(yùn)行效果如圖15.4。例子3使用了JDK1.5版本之前的LinkedList。2023/10/1§15.2.4排序與查找Collections類提供的用于排序和查找的類方法如下:publicstaticsort(List<E>list)該方法可以將list中的元素升序排列。intbinarySearch(List<T>list,Tkey,CompareTo<T>c)使用折半法查找list是否含有和參數(shù)key相等的元素,如果key鏈表中某個(gè)元素相等,方法返回和key相等的元素在鏈表中的索引位置〔鏈表的索引位置從0考試〕,否那么返回-1。例子4中,Student類通過實(shí)現(xiàn)Comparable接口規(guī)定該類的對(duì)象的大小關(guān)系〔按height值的大小確定大小關(guān)系,即學(xué)生按其身高確定之間的大小關(guān)系〕。鏈表添加了3個(gè)Student對(duì)象,Collections調(diào)用sort方法將鏈表中的對(duì)象按身其height值升序排序,并查找一個(gè)對(duì)象的height值是否和鏈表中某個(gè)對(duì)象的height值相同。運(yùn)行效果如圖15.5。2023/10/1§15.2.5洗牌與旋轉(zhuǎn)

Collections類還提供了將鏈表中的數(shù)據(jù)重新隨機(jī)排列的類方法以及旋轉(zhuǎn)鏈表中數(shù)據(jù)的類方法。publicstaticvoidshuffle(List<E>list)

將list中的數(shù)據(jù)按洗牌算法重新隨機(jī)排列。staticvoidrotate(List<E>list,intdistance)

旋轉(zhuǎn)鏈表中的數(shù)據(jù)。

publicstaticvoidreverse(List<E>list)

翻轉(zhuǎn)list中的數(shù)據(jù)。

例子5使用了shuffle()方法、reverse()方法和rotate()方法,運(yùn)行效果如圖15.6。2023/10/1§15.3堆棧堆棧是一種“后進(jìn)先出〞的數(shù)據(jù)結(jié)構(gòu),只能在一端進(jìn)行輸入或輸出數(shù)據(jù)的操作。Stack<E>泛型類創(chuàng)立一個(gè)堆棧對(duì)象,堆棧對(duì)象常用方法:publicEpush(Eitem);實(shí)現(xiàn)壓棧操作publicEpop();實(shí)現(xiàn)彈棧操作。publicbooleanempty();判斷堆棧是否還有數(shù)據(jù)。publicEpeek();獲取堆棧頂端的數(shù)據(jù),但不刪除該數(shù)據(jù)。publicintsearch(Objectdata);獲取數(shù)據(jù)在堆棧中的位置。例子6用堆棧輸出該遞歸序列的假設(shè)干項(xiàng)2023/10/1§15.4散列映射

§15.4.1HashMap<K,V>泛型類HashMap<K,V>對(duì)象采用散列表這種數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)數(shù)據(jù),習(xí)慣上稱HashMap<K,V>對(duì)象為散列映射。例如:HashMap<String,Student>hashtable=HashSet<String,Student>();hashtable可以存儲(chǔ)“鍵/值〞對(duì)數(shù)據(jù)。相關(guān)方法:publicVput(Kkey,Vvalue)將鍵/值對(duì)數(shù)據(jù)存放到散列映射中,該方法同時(shí)返回鍵所對(duì)應(yīng)的值。2023/10/1§15.4.2常用方法publicvoidclear()清空散列映射。publicObjectclone()返回當(dāng)前散列映射的一個(gè)克隆。publicbooleancontainsKey(Objectkey)如果散列映射有“鍵/值〞對(duì)使用了參數(shù)指定的鍵,方法返回true,否那么返回false。publicbooleancontainsValue(Objectvalue)如果散列映射有“鍵/值〞對(duì)的值是參數(shù)指定的值。publicVget(Objectkey)返回散列映射中使用key做鍵的“鍵/值〞對(duì)中的值。publicbooleanisEmpty()如果散列映射不含任何“鍵/值〞對(duì),方法返回true,否那么返回false。publicVremove(Objectkey)刪除散列映射中鍵為參數(shù)指定的“鍵/值〞對(duì),并返回鍵對(duì)應(yīng)的值。publicintsize()返回散列映射的大小,即散列映射中“鍵/值〞對(duì)的數(shù)目。2023/10/1§15.4.3遍歷散列映射

publicCollection<V>values()方法返回一個(gè)實(shí)現(xiàn)Collection<V>接口類創(chuàng)立的對(duì)象。使用接口回調(diào)技術(shù),即將該對(duì)象的引用賦給Collection<V>接口變量,該接口變量可以回調(diào)iterator()方法獲取一個(gè)Iterator對(duì)象,這個(gè)Iterator對(duì)象存放著散列映射中所有“鍵/值〞對(duì)中的“值〞。2023/10/1§15.4.4基于散列映射的查詢對(duì)于經(jīng)常需要進(jìn)行查找的數(shù)據(jù)可以采用散列映射來存儲(chǔ)這樣的數(shù)據(jù),即為數(shù)據(jù)指定一個(gè)查找它的關(guān)鍵字,然后按著“健-值〞對(duì),將關(guān)鍵字和數(shù)據(jù)一并存入散列映射中。例子7(Example15_7.java

,WindowWord.java

,WordPolice.java

,word.txt)例子7是一個(gè)英語(yǔ)單詞查詢的GUI程序,用戶在界面的的一個(gè)文本框中輸入一個(gè)英文單詞回車確認(rèn),另一個(gè)文本框顯示英文單詞的漢語(yǔ)翻譯。例子7中使用一個(gè)文本文件word.txt來管理假設(shè)干個(gè)英文單詞及漢語(yǔ)翻譯2023/10/1§15.5樹集

§15.5.1TreeSet<E>泛型類

TreeSet<E>類創(chuàng)立的對(duì)象稱作樹集。例如TreeSet<String>mytree=newTreeSe<String>();然后使用add方法為樹集添加節(jié)點(diǎn),例如mytree.add("boy");2023/10/1§15.5.2節(jié)點(diǎn)的大小關(guān)系樹集用add方法添加節(jié)點(diǎn),節(jié)點(diǎn)會(huì)按其存放的數(shù)據(jù)的“大小〞順序一層一層地依次排列,在同一層中的節(jié)點(diǎn)從左到右按“大小〞順序遞增排列,下一層的都比上一層的小。2023/10/1§15.5.3TreeSet類的常用方法publicbooleanadd(Eo)向樹集添加加節(jié)點(diǎn)。publicvoidclear()刪除樹集中的所有節(jié)點(diǎn)。publicvoidcontains(Objecto)如果樹集中有包含參數(shù)指定的對(duì)象,該方法返回true,否那么返回false。publicEfirst()返回樹集中的第一個(gè)節(jié)點(diǎn)中的數(shù)據(jù)〔最小的節(jié)點(diǎn)〕。publicElast()返回最后一個(gè)節(jié)點(diǎn)中的數(shù)據(jù)〔最大的節(jié)點(diǎn)〕。publicisEmpty()判斷是否是空樹集,如果樹集不含任何節(jié)點(diǎn),該方法返回true。publicbooleanremove(Objecto)刪除樹集中的存儲(chǔ)參數(shù)指定的對(duì)象的最小節(jié)點(diǎn)。publicintsize()返回樹集中節(jié)點(diǎn)的數(shù)目。例子8中的樹集按著英語(yǔ)成績(jī)從底到高存放四個(gè)Student對(duì)象。2023/10/1§15.6樹映射

TreeMap<K,V>類實(shí)現(xiàn)了Map<K,V>接口,稱TreeMap<K,V>對(duì)象為樹映射。樹映射使用publicVput(Kkey,Vvalue);方法添加節(jié)點(diǎn)。

例子9使用了TreeMap,分別按著學(xué)生的英語(yǔ)成績(jī)和數(shù)學(xué)成績(jī)排序節(jié)點(diǎn)。

2023/10/1§15.7自動(dòng)裝箱與拆箱JDK1.5新增的根本類型數(shù)據(jù)和相應(yīng)的對(duì)象之間相互自動(dòng)轉(zhuǎn)換的功能,稱作根本數(shù)據(jù)類型的自動(dòng)裝箱與拆箱〔AutoboxingandAu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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)論