




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第十五章
-----用集合存儲對象/掌握Java集合框架的常用接口掌握常用集合類:VectorArrayListHashMapHashTable學習目標/為什么需要集合框架學員1學員20如何存儲每天的新聞信息?如何存儲課程的編號與課程信息,能夠通過編號方便地獲得課程信息?如果寫程序時并不知道程序運行時會需要多少對象,或者,需要更復雜的方式存儲對象——那么,可以使用Java集合框架,來解決這類問題一維數組代碼1……代碼N課程1……課程N一一對應新聞1……新聞N每天的新聞總數不確定,顯然無法再使用數組保存存儲一個班的學員信息,假定一個班容納20名學員集合框架層次圖/從上面的圖可以看出java集合類主要有以下幾種:List結構的集合類:ArrayList類,LinkedList類,Vector類,Stack類Map結構的集合類:HashMap類,Hashtable類Set結構的集合類:HashSet類,TreeSet類Queue結構的集合:Queue接口/Java集合框架,為我們提供了一套性能優良、使用方便的接口和類,我們不必再重新發明,只需學會如何使用它們,就可以處理實際應用中出現的問題了Java集合框架位于java.util包中/List接口和ArrayList類開發一套小型的新聞管理系統,要求如下:可以存儲各類新聞標題(包含ID、名稱、創建者、創建時間)可以獲取新聞標題的總數可以逐條打印每條新聞標題的名稱存儲方式如何選擇?元素個數不確定使用集合類需要遍歷元素存儲對象如何確定?類型:新聞標題屬性:ID、名稱、創建者、創建時間/List接口和ArrayList類第一步,確定存儲方式
1、ArrayList類是List接口的一個具體實現類2、ArrayList對象實現了可變大小的數組3、隨機訪問和遍歷元素時,它提供更好的性能元素1元素2元素3元素4元素5元素6元素7元素8元素9元素10當元素個數增加為11個0129345786元素1元素2元素3元素4元素5元素6元素7元素8元素9元素10元素11創建了一個新的數組,把原數組中元素復制進來012934578610根據下標位置訪問元素/List接口和ArrayList類5-3第二步:確定存儲對象1、創建類型:新聞標題2、包含屬性:ID、名稱、創建者、創建時間publicclassFirstLevelTitle{privateintid;//IDprivateStringtitleName;//名稱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;}}/List接口和ArrayList類5-4第三步:具體實現1、按照順序依次添加各類新聞標題2、獲取新聞標題的總數3、根據位置獲取相應新聞標題4、逐條打印每條新聞標題的名稱publicclassFirstLevelTitleDB1{publicstaticvoidmain(String[]args){FirstLevelTitlecar=newFirstLevelTitle(1,"汽車","管理員",newDate());FirstLevelTitletest=newFirstLevelTitle(2,"高考","管理員",newDate());ListnewsTitleList=newArrayList();newsTitleList.add(car);newsTitleList.add(test); System.out.println("新聞標題數目為:"+newsTitleList.size()+"條");print(newsTitleList);}publicstaticvoidprint(ListnewsList){for(inti=0;i<newsList.size();i++){FirstLevelTitletitle=(FirstLevelTitle)newsList.get(i);System.out.println(i+1+":"+title.getTitleName());}}}123順序添加,位置從0開始新聞標題數目為:2條1:汽車2:高考控制臺輸出4從集合中取出后為Object類型,需要進行強制類型轉換/List接口和ArrayList類5-5第三步:具體實現1、在指定的位置添加新聞標題2、判斷是否已經存儲了某條新聞標題3、刪除指定位置處的某一新聞標題publicclassFirstLevelTitleDB2{publicstaticvoidmain(String[]args){FirstLevelTitlecar=newFirstLevelTitle(1,"汽車","網站管理員",newDate());FirstLevelTitletest=newFirstLevelTitle(2,"高考","網站管理員",newDate());FirstLevelTitlehouse=newFirstLevelTitle(3,"房產","網站管理員",newDate());ListnewsTitleList=newArrayList();newsTitleList.add(car);newsTitleList.add(test);newsTitleList.add(2,house);if(newsTitleList.contains(test)){ System.out.println("有高考的新聞");}else{ System.out.println("沒有高考的新聞");}newsTitleList.remove(1);System.out.println("新聞標題數目為:"+newsTitleList.size()+"條");}}123在指定的位置添加元素有高考的新聞新聞標題數目為:2條控制臺輸出刪除指定位置的元素/ArrayList總結ArrayList就是傳說中的動態數組,它提供了動態的增加和減少元素,實現了ICollection和IList接口,靈活的設置數組的大小等好處,注意的是List也是從0開始計數的。ArrayList主要方法:booleanadd(Objecto):在列表的末尾順序添加元素intsize():返回列表中的元素個數Objectget(intindex):返回指定索引位置處的元素,注意:取出的元素是Object類型,使用前需要進行強制類型轉換。voidadd(intindex,Objecto):在指定的索引位置添加元素,注意:索引位置必須介于0和列表中的元素個數之間。booleancontains(Objecto):判斷列表中是否存在指定的元素booleanremove(Objecto):從列表中刪除元素Iterator接口Iterator:對collection進行迭代的迭代器。本身就是一個對象,它的工作就是遍歷并選擇集合序列中的對象,而客戶端的程序員不必知道或關心該序列底層的結構。此外,迭代器通常被稱為輕量級對象,創建它的代價小。Iterator接口(1.2版,替代Enumeration)是一個遍歷集合元素的工具,是對Enumeration接口的改進,因此在遍歷集合元素時,優先選用Iterator接口。與Enumeration不同,具有從正在遍歷的集合中去除對象的能力。具有如下三個實例方法:hasNext()
——判斷是否還有元素next()
——取得下一個元素remove()——去除一個元素。注意是從集合中去除最后調用next()返回的元素,而不是從Iterator類中去除//小結1創建一個類Cat包含屬性name,在構造方法中進行初始化添加一個方法show(),用以打印name屬性的值創建一個類CatTest,添加main方法,實現創建一個ArrayList,向其中添加幾個Cat對象遍歷該集合,并且對每個Cat對象調用show()方法/List接口和LinkedList類3-1升級這套小型的新聞管理系統,要求如下:可以添加頭條新聞標題可以刪除末條新聞標題存儲方式如何選擇?元素個數不確定使用集合類需要在列表的頭或尾添加、刪除元素/List接口和LinkedList類3-2第一步,確定存儲方式1、LinkedList類是List接口的一個具體實現類2、LinkedList類用于創建鏈表數據結構3、插入或者刪除元素時,它提供更好的性能/List接口和LinkedList類3-3第二步:具體實現1、添加頭條、以及最末條新聞標題2、獲取頭條、以及最末條新聞標題3、刪除頭條、以及最末條新聞標題publicclassFirstLevelTitleDB3{publicstaticvoidmain(String[]args){FirstLevelTitlecar=newFirstLevelTitle(1,"汽車","管理員",newDate());FirstLevelTitlemedical=newFirstLevelTitle(2,"醫學","管理員",newDate());LinkedListnewsTitleList=newLinkedList();newsTitleList.addFirst(car);newsTitleList.addLast(medical);FirstLevelTitlefirst=(FirstLevelTitle)newsTitleList.getFirst();System.out.println("頭條的新聞標題為:"+first.getTitleName());FirstLevelTitlelast=(FirstLevelTitle)newsTitleList.getLast();System.out.println("排在最后的新聞標題為:"+last.getTitleName());newsTitleList.removeFirst();newsTitleList.removeLast();}}123ArrayList、Vector、LinkedList總結ArrayList:底層采用的數據結構是數組結構。特點:查詢速度快,增刪速度稍慢;線程不同步。容量的增長比例為自身的50%。Vector:底層采用的數據結構是數組結構。早期版本中使用的一個容器,基于線程同步。容量的增長比例為自身的100%。現被ArrayList替代。LinkedList:底層采用的數據結構是鏈表結構。特點:增刪速度快,查詢速度慢。線程不同步。提示:在項目的開發過程中,根據List集合中實現類的不同的特性進行相應List的構建和使用。//小結2電影DVD在線銷售系統,它需要完成如下功能:1.能夠添加n個電影DVD對象,數量不確定,并且能夠、修改、刪除、查詢電影DVD信息。2.能夠獲取電影DVD對象的總數。3.能夠取出電影DVD對象并且逐條打印它的名稱。4.能夠添加銷售冠軍電影DVD對象5.能夠刪除銷售最后一名的電影DVD對象/Map接口和HashMap類4-1學員應聘至外企工作,每個學員都會有一個英文名稱,對應該學員對象Jack北京大學畢業的李明Rose北京大學畢業的劉麗現在希望通過英文名稱,獲得該學員對象的詳細信息,如何實現?存儲方式如何選擇?元素個數不確定使用集合類通過key(英文名稱)獲得value(學員對象)存儲對象如何確定?類型:學員屬性:學校名稱、姓名/Map接口和HashMap類4-2第一步,確定存儲方式1、Map接口用于維護“鍵-值對”的關聯性,可以通過鍵查找值2、HashMap是Map接口的一個具體實現類/Map接口和HashMap類4-3第二步:確定存儲對象1、創建類型:學員2、包含屬性:學校名稱、姓名publicclassStudent{privateStringname;//學員姓名privateStringschool;//學校名稱publicStudent(Stringname,Stringschool){=name;this.school=school;}publicStringtoString(){ returnschool+"畢業的"+name;}}重寫Object的toString()方法,用于輸出調試和描述信息/Map接口和HashMap類4-4第三步:具體實現1、把英文名稱與學員對象按照“鍵-值對”的方式存儲在HashMap中2、分別打印鍵集、值集、以及鍵-值對集合3、判斷是否存在某個鍵,如果是,則根據鍵獲取相應的值4、根據鍵、刪除某條記錄publicclassMapTest{publicstaticvoidmain(String[]args){Studentstudent1=newStudent(“李明”,“北京大學");Studentstudent2=newStudent(“劉麗”,“清華大學");Mapstudents=newHashMap();students.put("Jack",student1);students.put("Rose",student2);System.out.println("鍵集:"+students.keySet());System.out.println("值集:"+students.values());System.out.println("鍵-值對集合:"+students);Stringkey="Jack";if(students.containsKey(key))System.out.println(students.get(key));students.remove(key);System.out.println("鍵-值對集合:"+students);}}123鍵集:[Jack,Rose]值集:[北京大學畢業的李明,清華大學畢業的劉麗]鍵-值對集合:{Jack=北京大學畢業的李明,Rose=清華大學畢業的劉麗}北京大學畢業的李明鍵-值對集合:{Rose=清華大學畢業的劉麗}控制臺輸出4/HashMapHashMap類:基于哈希表的Map接口的實現。此實現提供所有可選的映射操作,并允許使用null鍵和null值。此類不保證映射的順序。此類的實現是基于非同步的。常用方法:Objectput(Objectkey,Objectvalue):以鍵-值對的方式進行存儲,注意:鍵必須是唯一的,值可以重復。如果試圖添加重復的鍵,那么最后加入的鍵-值對將替換掉原先的鍵-值對。SetkeySet():返回鍵的集合Collectionvalues():返回值的集合booleancontainsKey(Objectkey):如果存在由指定的鍵映射的鍵-值對,返回trueObjectget(Objectkey):根據鍵返回相關聯的值,如果不存在指定的鍵,返回nullObjectremove(Objectkey):刪除由指定的鍵映射的鍵-值對HashtableHashtable類:此類實現一個哈希表,該哈希表將鍵映射到相應的值。任何非null對象都可以用作鍵或值,即Hashtable不允許存在null鍵和null值。此類基于線程同步。其余特性Hashtable類與HashMap大致相同。/HashMap和Hashtable區別 HashMap和Hashtable都是java的集合類,都可以用來存放java對象,這是他們的相同點,但是他們也有區別: 1.歷史原因 Hashtable是基于陳舊的Dictionary類的,HashMap是java1.2引進的Map接口的一個實現。 2.同步性 Hashtable是同步的。這個類中的一些方法保證了Hashtable中的對象是線程安全的。而HashMap是異步的,因此HashMap中的對象并不是線程安全的。因為同步的要求會影響執行的效率,所以如果你不需要線程安全的集合那么使用HashMap是一個很好的選擇,這樣可以避免由于同步帶來的不必要的性能開銷,從而提高效率。 3.值 HashMap可以讓你將空值作為一個表的條目的key或value,但是Hashtable是不能放入空值的(null)。/請給出下面Java代碼的運行結果importJava.util.*;publicclassTestMap{publicstaticvoidmain(String[]args){Studentstudent1=newStudent(“李明”,“北京大學");Studentstudent2=newStudent(“劉麗”,“清華大學");Studentstudent3=newStudent(“張娜”,“西安交大");Studentstudent4=student1;Mapstudents=newHashMap();students.put("Jack",student1);students.put("Rose",student2);students.put("Mary",student3);students.put("Rose",student4);System.out.println("鍵集:"+students.keySet());System.out.println("值集:"+students.values());}}鍵集:[Jack,Mary,Rose]值集:[北京大學畢業的李明,西安交大畢業的張娜,北京大學畢業的李明]/小結3創建一個類Book包含屬性:title(標題),使用構造方法進行初始化重寫toString()方法,用以返回Title屬性的值創建一個類BookTest,添加main方法,要求:使用HashMap進行存儲,鍵為Book對象的編號,值為Book對象通過某一個編號獲取B
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合同的補充協議英語
- 電腦供貨合同協議
- 互聯網合作協議合同
- 調解協議合同效力
- 簽訂實習協議合同
- 雇傭做飯合同協議書范本
- 棚改補償協議和買賣合同
- 傷亡賠償協議合同
- 第三方協議就是勞動合同
- 直播合同協議
- 深靜脈血栓的評估和預防
- 杭州浙江杭州市上城區行政審批服務管理辦公室編外人員招聘筆試歷年參考題庫附帶答案詳解
- DB37-T 4612-2023 化妝品生產企業批生產記錄常用管理規范
- 干凈整潔的個人衛生習慣
- 光伏補貼申請流程
- 2025年國家能源集團國神公司招聘筆試參考題庫含答案解析
- 廚師操作安全培訓
- 小數與單位換算(說課稿)-2023-2024學年四年級下冊數學人教版
- 2025年福建泉州交發集團招聘筆試參考題庫含答案解析
- 2024年度文化教育機構代運營合作協議3篇
- 兩位數加一位數口算練習題4000道88
評論
0/150
提交評論