




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
《面向對象程序設計》教案第25講教學對象計算機科學技術專業授課內容10.1泛型10.2集合框架10.3List接口及實現類課程標準教學目標(一)知識目標1.了解泛型的概念2.掌握泛型的定義和使用3.了解集合框架4.掌握List接口及實現類(二)能力目標1.能夠學會泛型類的定義和使用2.熟練掌握ArrayList的基本操作,能夠熟練使用List集合解決問題教學方法采用講授法、演示法、討論法、案例教學。學時及分配(第1學時50分鐘)課堂講授30分鐘課堂練習20分鐘10.1泛型10.2集合框架學時及分配(第2學時50分鐘)課堂講授20分鐘課堂練習30分鐘10.3List接口及實現類知識點分析重點:泛型類型的定義和使用ArrayList的基本操作難點:泛型接口及泛型方法集合的體系結構、迭代器教學過程設計內容方式問題導入回顧一下,我們在前邊課程中定義了一個整數棧類IntStack,該類使用Integer作為棧的元素,這就限制了該類只能對Integer元素操作。如果要使這個棧類更具有通用性,我們可以使用Object作為棧的元素,因為Object類是所有類的超類,所以Object可以引用任何對象類型。然而,這種做法無法提供類型的安全性,在進行類型轉換時可能發生類型不匹配異常。使用泛型就可以提高類型安全性,因為,它可以使類型轉換自動地、隱式地進行。所謂泛型(generics)就是帶一個或多個類型參數(typeparameter)的類或接口。對于上述討論的對象棧,可以使用泛型定義。內容要點10.1.1泛型類泛型是帶一個或多個類型參數的類或接口。【程序10-1】定義一個泛型Node類表示節點,類型參數T表示節點中存放的值。Node.javapackagecom.boda.xy;publicclassNode<T>{privateTdata;//泛型成員publicNode(){}//默認構造方法publicNode(Tdata){//帶參數構造方法this.data=data;}publicTgetData(){//訪問方法定義 returndata;}publicvoidsetData(Tdata){//修改方法定義 this.data=data;}//顯示類型名publicvoidshowType(){ System.out.println("T的類型是:"+data.getClass().getName());}}泛型類型的使用與方法調用類似,方法調用需向方法傳遞參數,使用泛型需傳遞一個類型參數,即用某個具體的類型替換T。例如,如果要在Node對象中存放Integer對象,就需要在創建Node對象時為其傳遞Integer類型參數。要實例化泛型類對象,也使用new運算符,但在類名后面需加上要傳遞的具體類型。varintNode=newNode<Integer>();一旦創建了intNode對象,就可以調用setData()方法設置其中的Integer對象,調用getData()方法返回其中的Integer對象,如下代碼所示。【程序10-2】NodeTest.javapackagecom.boda.xy;publicclassNodeTest{publicstaticvoidmain(String[]args){varintNode=newNode<Integer>();不需要強制類型轉換intNode.setData(999);不需要強制類型轉換varvalue=intNode.getData();System.out.println(value);intNode.showType();}}按照約定,類型參數名使用單個大寫字母表示。常用的類型參數名有:E表示元素,K表示鍵,N表示數字,T表示類型,V表示值等。10.1.2泛型接口還可以定義泛型接口。泛型可能具有多個類型參數,但在類或接口的聲明中,每個參數名必須是唯一的。【程序10-3】定義了帶兩個參數的泛型接口Entry。【程序10-4】定義了實現Entry接口的泛型類Pair。下面語句創建兩個Pair類實例:varp1=newPair<Integer,String>(20,"twenty");varp2=newPair<String,String>("china","Beijing");10.1.3泛型方法泛型方法(genericmethod)是帶類型參數的方法。類的成員方法和構造方法都可以定義為泛型方法。泛型方法的定義與泛型類型的定義類似,但類型參數的作用域僅限于聲明的方法和構造方法內。泛型方法可以定義為靜態的和非靜態的。【程序10-5】泛型方法的定義和使用。MathUtil.java參見教材。10.1.4通配符(?)的使用泛型類型本身是一個Java類型,為泛型類型傳遞不同的類型參數會產生不同的類型。例如:List<Object>list1=newArrayList<Object>();List<String>list2=newArrayList<String>();List<String>并不是List<Object>的子類型。因此,把一個List<String>對象傳遞給一個需要List<Object>對象的方法,將會產生一個編譯錯誤。請看下面代碼。publicstaticvoidprintList(List<Object>list){for(Objectelement:list){System.out.println(element);}}如果傳遞給該方法一個List<String>對象,將發生編譯錯誤。如果要使上述方法可打印任何類型的列表,可將其參數類型修改為List<?>,如下所示:publicstaticvoidprintList(List<?>list){for(Objectelement:list){System.out.println(element);}}這里,問號(?)就是通配符,它表示該方法可接受任何類型的List對象。【程序10-6】WildCardDemo.java10.1.5方法中有界參數有時需要限制傳遞給類型參數的類型種類,例如,要求一個方法只接受Number類或其子類的實例,這就需要使用有界類型參數(boundedtypeparameter)。有界類型分為上界和下界,上界用extends指定,下界用super指定。例如,要聲明上界類型參數,應使用問號(?),后跟extends關鍵字,然后是上界類型。這里,extends具有一般的意義,對類表示擴展(extends),對接口表示實現(implements)。假如要定義一個getAverage()方法,它返回一個列表中所有數字的平均值,我們希望該方法能夠處理Integer列表、Double列表等各種數字列表。但是,如果把List<Number>作為getAverage()方法的參數,它將不能處理List<Integer>列表或List<Double>列表。為了使該方法更具有通用性,可以限定傳遞給該方法的參數是Number對象或其子類對象的列表,這里Number類型就是列表中元素類型的上界(upperbound)。下面案例的getAverage()方法就是這樣的參數。【程序10-7】BoundedTypeDemo.java10.2集合框架集合是指集中存放一組對象的一個對象。集合相當于一個容器,它提供了保存、獲取和操作其他元素的方法。集合能夠幫助Java程序員輕松地管理對象。Java集合框架由兩種類型構成,一個是Collection,另一個是Map。Collection對象用于存放一組對象,Map對象用于存放一組“關鍵字/值”的對象。Collection和Map是最基本的接口,它們又有子接口,這些接口的層次關系如圖12-5所示。10.3List接口及實現類List接口實現一種線性表的數據結構。存放在
List中的所有元素都有一個下標(從0開始),可以通過下標訪問List中的元素。List中可以包含重復元素。List接口的實現類包括ArrayList、LinkedList、Vector和Stack。10.3.1List的操作List接口除繼承Collection的方法外,還定義了一些自己的方法。使用這些方法可以實現定位訪問、查找、迭代和返回子線性表。booleanadd(Objecte):將指定元素插入到列表末尾。voidadd(intindex,Eelement):將指定元素插入到指定下標處。Eget(intindex):返回指定下標處的元素。Eset(intindex,Eelement):修改指定下標處的元素。Eremove(intindex):刪除指定下標處的元素booleanaddAll(intindex,Collection<?extendsE>c):在指定下標處插入集合c中的全部元素。intindexOf(Objecto):查找指定對象第一次出現的位置。intlastIndexOf(Objecto):查找指定對象最后一次出現的位置。List<E>subList(intfrom,intto):返回從from到to元素的一個子線性表。10.3.2ArrayList類ArrayList是最常用的列表實現類,它通過數組實現的集合對象。ArrayList類實際上實現了一個變長的對象數組,其元素可以動態地增加和刪除。它的定位訪問時間是常量時間。ArrayList的構造方法如下:ArrayList():創建一個空的數組列表對象,默認初始容量是10。初始容量指的是列表可以存放多少元素。當列表填滿而又需要添加更多元素時,列表大小會自動增大。ArrayList(Collectionc):用集合c中的元素創建一個數組列表對象。ArrayList(intinitialCapacity):創建一個空的數組列表對象,并指定初始容量。下列代碼創建一個ArrayList對象向其中插入幾個元素,并使用ArrayList的有關方法對它操作。varbigCities=newArrayList<String>();bigCities.add("北京");bigCities.add("上海");bigCities.add("廣州");System.out.println(bigCities.size());bigCities.add(2,"倫敦");//插入元素bigCities.set(2,"紐約");//修改元素System.out.println(bigCities.contains("北京"));System.out.println(bigCities);System.out.println(bigCities.indexOf("巴黎"));10.3.3遍歷集合元素在使用集合時,遍歷集合元素是最常見的任務。遍歷集合中的元素有多種方法:用簡單的for循環、用增強的for循環和用Iterator迭代器對象。1.使用簡單的for循環使用簡單的for循環可以遍歷集合中的每個元素。for(vari=0;i<bigCities.size();i++){System.out.print(bigCities.get(i)+"");}2.使用增強的for循環使用增強的for循環不但可以遍歷數組的每個元素,還可以遍歷集合中的每個元素。下面的代碼打印集合的每個元素:for(varcity:bigCities)System.out.println(city);上述代碼的含義是:將集合bigCities中的每個對象存儲到city變量中,然后打印輸出。使用這種方法只能按順序訪問集合中的元素,不能修改和刪除集合元素。3.使用迭代器迭代器是一個可以遍歷集合中每個元素的對象。調用集合對象的iterator()方法可以得到Iterator對象,再調用Iterator對象的方法就可以遍歷集合中的每個元素。Iterator接口定義了如下3個方法。booleanhasNext():返回迭代器中是否還有對象。Enext():返回迭代器中下一個對象。voidremove():刪除迭代器中的當前對象。Iterator使用一個內部指針,開始它指向第一個元素的前面。如果在指針的后面還有元素,hasNext()方法返回true。調用next()方法,指針將移到下一個元素,并返回該元素。remove()方法將刪除指針所指的元素。假設myList是ArrayList的一個對象,要訪問myList中的每個元素,可以按下列方法實現:Iteratoriterator=myList.iterator();//得到迭代器對象while(iterator.hasNext()){System.out.println(iterator.next());}使用Iterator也可以用for循環訪問集合元素。for(variterator=myList.iterator();iterator.hasNext();){System.out.println(iterator.next());}【程序10-8】ListDemo.java10.3.4數組轉換為List對象java.util.Arrays類提供了一個asList()方法,它將數組轉換成List對象:publicstatic<T>List<T>asList(T…a)該方法提供了一個方便的從多個元素創建List對象的途徑,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工業設計與消費心理的互動影響
- 工業遺產的旅游價值挖掘與利用
- 工作場所心理健康與防騙意識培養
- 工業設計與產品包裝的關聯性研究
- 工作流程標準化及其在企業管理中的應用案例
- 工作場所的多樣化管理
- 工作流程優化與管理方法改進
- 工程教育的項目式學習與教學設計
- 工程機械的智能化設計與維護
- 市場分析與市場營銷決策結合的研究
- 2025年一年級道德與法治人教版試題
- 道法 期末復習模擬測試卷-+2024-2025學年統編版道德與法治七年級下冊
- 字節跳動考勤管理制度
- 嚴重創傷患者緊急救治血液保障模式與輸血策略中國專家共識(2024版)解讀
- 母嬰銷售員合同協議書
- 安全工作規程課件
- 躁動患者約束帶的使用及護理
- T/CCS 008-2023煤礦5G通信網絡設備接入通用技術要求
- 第二屆全國化工和醫藥行業安全生產線上知識競賽題庫(共150題)
- 國家開放大學國開電大《統計與數據分析基礎》形考任務1-4 參考答案
- 2025年數字道閘項目市場調查研究報告
評論
0/150
提交評論