北大青鳥y2-java課件4前沿技術(shù)tp2v_第1頁
北大青鳥y2-java課件4前沿技術(shù)tp2v_第2頁
北大青鳥y2-java課件4前沿技術(shù)tp2v_第3頁
北大青鳥y2-java課件4前沿技術(shù)tp2v_第4頁
北大青鳥y2-java課件4前沿技術(shù)tp2v_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Java的泛型第二章2回顧代碼填空,完成@Test注記的代碼importjava.lang.annotation.*;@Retention(_______________________)@Target(_______________________)public____________________Test{}RetentionPolicy.RUNTIMEElementType.METHOD@interface3本章任務(wù)使用泛型實現(xiàn)一個通用的求極值算法。使用泛型改寫S2JSP課程的新聞發(fā)布系統(tǒng)的有關(guān)集合的代碼。4掌握JavaSE的泛型原理使用泛型集合API操縱對象數(shù)據(jù)本章目標(biāo)5為什么需要泛型?在JavaSE5.0以前操作集合的缺點:從集合中取出對象,需要執(zhí)行類型轉(zhuǎn)換操作:由于沒有類型檢查,可以向集合添加任意對象,例如添加一個文件對象,但get方法取出的File對象轉(zhuǎn)換為String會產(chǎn)生運行錯誤:ArrayListfiles=newArrayList();...Stringfilename=(String)files.get(0);files.add(newFile("..."));6基于泛型的解決方案泛型提供了類型參數(shù)只能將String類型對象存入集合,不能存儲“大象”,“File”等編譯器可以發(fā)現(xiàn)如下錯誤取出對象的類型為String,無需執(zhí)行類型轉(zhuǎn)換ArrayList<String>files=newArrayList<String>();Stringfilename=files.get(0);files.add(newFile("..."));精簡代碼錯誤!7定義一個泛型類Pair類具有兩個成員,類型待定使用privateTfirst表示first的類型為參數(shù)TpublicclassPair<T>{

privateTfirst;privateTsecond;publicPair(){first=null;second=null;}publicPair(Tfirst,Tsecond){this.first=first;this.second=second;}publicTgetFirst(){returnfirst;}publicTgetSecond(){returnsecond;}publicvoidsetFirst(TnewValue){first=newValue;}publicvoidsetSecond(TnewValue){second=newValue;}}8實現(xiàn)通用的求極值算法編寫一個泛型方法,能夠?qū)?shù)組求最大值和最小值classArrayAlg{publicstatic<TextendsComparable>Pair<T>minmax(T[]a){if(a==null||a.length==0){returnnull;}Tmin=a[0];Tmax=a[0];for(inti=1;i<a.length;i++){if(pareTo(a[i])>0){min=a[i];}if(pareTo(a[i])<0){max=a[i];}}returnnewPair<T>(min,max);}}大小大小9使用泛型方法創(chuàng)建一個日歷的數(shù)組,求出最大和最小的日期Pair<GregorianCalendar>mm使用GregorianCalendar為Pair<T>傳遞類型參數(shù)Java.util.GregorianCalendar實現(xiàn)了接口parable<T>GregorianCalendar[]birthdays={newGregorianCalendar(1906,Calendar.DECEMBER,9),newGregorianCalendar(1815,Calendar.DECEMBER,10),newGregorianCalendar(1903,Calendar.DECEMBER,3),newGregorianCalendar(1910,Calendar.JUNE,22),};Pair<GregorianCalendar>mm=ArrayAlg.minmax(birthdays);System.out.println("min="+mm.getFirst().getTime());System.out.println("max="+mm.getSecond().getTime());PairTest2.java10小結(jié)如何求出一個int類型數(shù)組的最大值和最小值?如何求出一個String類型數(shù)組的最大值和最小值(字典順序)?String[]words={"able","word","excel","course","java","c#"};Pair<String>mm=ArrayAlg.minmax(words);System.out.println("firstword="+mm.getFirst());System.out.println("lastword="+mm.getSecond());ArrayAlg.minmax方法的優(yōu)點是什么?11JavaSE5.0以后的集合沒有使用泛型的Java代碼警告(Eclipse環(huán)境中)系統(tǒng)提示使用泛型集合12泛型List如何定義泛型List對象List<T>List<Integer>numbers=newArrayList<Integer>();for(inti=1;i<=49;i++){numbers.add(i);}Collections.shuffle(numbers);List<Integer>bination=numbers.subList(0,6);Collections.sort(bination);System.out.println(bination);存儲Integer的List13泛型List接口和ArrayList類

回顧S2JSP課程的新聞發(fā)布系統(tǒng)的存儲對象,基于泛型實現(xiàn)創(chuàng)建類型:新聞標(biāo)題包含屬性:ID、名稱、創(chuàng)建者、創(chuàng)建時間publicclassFirstLevelTitle{privateintid;privateStringtitleName;privateStringcreater;privateDatecreateTime;publicFirstLevelTitle(intid,StringtitleName,Stringcreater,DatecreateTime){this.id=id;this.titleName=titleName;this.creater=creater;this.createTime=createTime;}publicStringgetTitleName(){returntitleName;}publicvoidsetTitleName(StringtitleName){this.titleName=titleName;}}14List接口和ArrayList類3-1具體實現(xiàn)按照順序依次添加各類新聞標(biāo)題獲取新聞標(biāo)題的總數(shù)publicclassFirstLevelTitleDB{publicstaticvoidmain(String[]args){FirstLevelTitlecar=newFirstLevelTitle(1,"汽車","管理員",newDate());FirstLevelTitletest=newFirstLevelTitle(2,"高考","管理員",newDate());List<FirstLevelTitle>newsTitleList=newArrayList<FirstLevelTitle>();newsTitleList.add(car);newsTitleList.add(test); System.out.println("新聞標(biāo)題數(shù)目為:"+newsTitleList.size()+"條");…}}15List接口和ArrayList類3-2具體實現(xiàn)根據(jù)位置獲取相應(yīng)新聞標(biāo)題逐條打印每條新聞標(biāo)題的名稱publicclassFirstLevelTitleDB{publicstaticvoidmain(String[]args){…System.out.println("新聞標(biāo)題數(shù)目為:"+newsTitleList.size()+"條");print(newsTitleList);}publicstaticvoidprint(List<FirstLevelTitle>newsList){for(inti=0;i<newsList.size();i++){FirstLevelTitletitle=newsList.get(i);System.out.println(i+1+":"+title.getTitleName());}}…根據(jù)位置獲取對象。從集合中取出后,不需要進行強制類型轉(zhuǎn)換。1216常見錯誤…FirstLevelTitlecar=newFirstLevelTitle(1,"汽車","管理員",newDate());FirstLevelTitletest=newFirstLevelTitle(2,"高考","管理員",newDate());List<FirstLevelTitle>newsTitleList=newArrayList<FirstLevelTitle>();newsTitleList.add(car);newsTitleList.add(test); print(newsTitleList);…publicstaticvoidprint(ListnewsList){for(inti=0;i<newsList.size();i++){FirstLevelTitletitle=newsList.get(i);System.out.println(i+1+":"+title.getTitleName());}}參數(shù)List接口沒有使用泛型。17基于foreach循環(huán)簡化集合的輸出如何使用foreach循環(huán)簡化代碼?publicstaticvoidprint(List<FirstLevelTitle>newsList){inti=0;

for(FirstLevelTitletitle:newsList){System.out.println(i+1+":"+title.getTitleName());}}18List接口和ArrayList類3-3實現(xiàn)如下功能在指定的位置添加新聞標(biāo)題判斷是否已經(jīng)存儲了某條新聞標(biāo)題刪除指定位置處的某一新聞標(biāo)題FirstLevelTitlehouse=newFirstLevelTitle(3,"房產(chǎn)","網(wǎng)站管理員",newDate());List<FirstLevelTitle>newsTitleList=newArrayList<FirstLevelTitle>();newsTitleList.add(2,house);if(newsTitleList.contains(test)){System.out.println("有高考的新聞");}else{ System.out.println("沒有高考的新聞");}newsTitleList.remove(1);在指定的位置添加元素。在指定的位置刪除元素。19常見錯誤請指出下面Java代碼中的錯誤:FirstLevelTitlecar=newFirstLevelTitle(1,"汽車","管理員",newDate());FirstLevelTitletest=newFirstLevelTitle(2,"高考","管理員",newDate())List<FirstLevelTitle>newsTitleList=newArrayList<FirstLevelTitle>();newsTitleList.add(car);newsTitleList.add(2,test);System.out.println("最后一條新聞為:"+newsTitleList.get(2).getTitleName());指定的位置必須是0到newsTitleList.size()之間數(shù)字。獲取元素的位置必須是0到newsTitleList.size()-1之間的數(shù)字。20List接口和LinkedList類2-1

具體實現(xiàn)添加頭條、以及最末條新聞標(biāo)題FirstLevelTitlecar=newFirstLevelTitle(1,"汽車","管理員",newDate());FirstLevelTitlemedical=newFirstLevelTitle(2,"醫(yī)學(xué)","管理員",newDate());LinkedList<FirstLevelTitle>newsTitleList=newLinkedList<FirstLevelTitle>();newsTitleList.addFirst(car);newsTitleList.addLast(medical);21List接口和LinkedList類2-2

具體實現(xiàn)獲取頭條、以及最末條新聞標(biāo)題刪除頭條、以及最末條新聞標(biāo)題LinkedList<FirstLevelTitle>newsTitleList=newLinkedList<FirstLevelTitle>();…FirstLevelTitlefirst=newsTitleList.getFirst();System.out.println("頭條的新聞標(biāo)題為:"+first.getTitleName());FirstLevelTitlelast=newsTitleList.getLast();System.out.println("排在最后的新聞標(biāo)題為:"+last.getTitleName());newsTitleList.removeFirst();newsTitleList.removeLast();

22常見錯誤FirstLevelTitlecar=newFirstLevelTitle(1,"汽車","管理員",newDate());FirstLevelTitletest=newFirstLevelTitle(2,"高考","管理員",newDate());List<FirstLevelTitle>newsTitleList=newLinkedList<FirstLevelTitle>();newsTitleList.add(car);newsTitleList.addFirst(test); …List接口中沒有定義addFirst方法。請指出下面Java代碼中的錯誤:23小結(jié)編寫一個List類型的對象存儲同學(xué)錄(存儲同學(xué)的姓名和聯(lián)系方式),輸出同學(xué)錄的列表到控制臺。24Map接口和HashMap類5-1確定存儲對象創(chuàng)建類型:AccpStudent包含屬性:中心名稱、學(xué)員姓名publicclassAccpStudent{privateStringname;//學(xué)員姓名privateStringschool;//中心名稱publicAccpStudent(Stringname,Stringschool){=name;this.school=school;}publicStringtoString(){ returnschool+"畢業(yè)的"+name;}}重寫Object的toString()方法,用于輸出調(diào)試和描述信息25Map接口和HashMap類5-2具體實現(xiàn)把英文名稱與學(xué)員對象按照“鍵-值對”的方式存儲在HashMap中分別打印鍵集、值集、以及鍵-值對集合AccpStudentstudent1=newAccpStudent("李明","西苑中心");AccpStudentstudent2=newAccpStudent("劉麗","西苑中心");Map<String,AccpStudent>students=newHashMap<String,AccpStudent>();students.put("Jack",student1);students.put("Rose",student2);System.out.println("鍵集:"+students.keySet());System.out.println("值集:"+students.values());System.out.println("鍵-值對集合:"+students);鍵集:[Jack,Rose]值集:[西苑中心畢業(yè)的李明,西苑中心畢業(yè)的劉麗]鍵-值對集合:{Jack=西苑中心畢業(yè)的李明,Rose=西苑中心畢業(yè)的劉麗}26Map接口和HashMap類5-3實現(xiàn)如下功能判斷是否存在某個鍵,如果是,則根據(jù)鍵獲取相應(yīng)的值根據(jù)鍵、刪除某條記錄AccpStudentstudent1=newAccpStudent("李明","西苑中心");AccpStudentstudent2=newAccpStudent("劉麗","西苑中心");Map<String,AccpStudent>students=newHashMap<String,AccpStudent>();students.put("Jack",student1);students.put("Rose",student2);Stringkey="Jack";if(students.containsKey(key))System.out.println(students.get(key));students.remove(key);System.out.println("鍵-值對集合:"+students);西苑中心畢業(yè)的李明鍵-值對集合:{Rose=西苑中心畢業(yè)的劉麗}27Map接口和HashMap類5-4Map<String,Employee>staff=newHashMap<String,Employee>();

溫馨提示

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

評論

0/150

提交評論