第07章 集合框架_第1頁
第07章 集合框架_第2頁
第07章 集合框架_第3頁
第07章 集合框架_第4頁
第07章 集合框架_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第七章第七章 集合框架集合框架本章主要內(nèi)容7.1 簡介 7.2 核心接口 7.3 List 7.4 Iterator接口 7.5 Set 7.6 Map 7.7 總結(jié) 7.1 簡介Java平臺提供了一個全新的集合框架?!凹峡蚣堋敝饕梢唤M用來操作對象的接口組成。不同接口描述一組不同數(shù)據(jù)類型。它們都封裝在java.util包中7.1 簡介集合接口:6個接口(短虛線表示),表示不同集合類型,是集合框架的基礎(chǔ)抽象類:5個抽象類(長虛線表示),對集合接口的部分實(shí)現(xiàn)??蓴U(kuò)展為自定義集合類實(shí)現(xiàn)類:8個實(shí)現(xiàn)類(實(shí)線表示),對接口的具體實(shí)現(xiàn)。Java集合框架包含的內(nèi)容1接口CollectionListMap

2、2具體類ListArrayListLinkedListMapHashMap3算法Java集合框架,為我們提供了一套性能優(yōu)良、使用方便的接口和類,我們不必再重新發(fā)明輪子,只需學(xué)會如何使用它們,就可以處理實(shí)際應(yīng)用中出現(xiàn)的問題了Java集合框架位于java.util包中 Collections提供了對集合進(jìn)行排序、遍歷等多種算法實(shí)現(xiàn)采用鍵-值對的存儲方式,長度可動態(tài)改變采用線性列表的存儲方式,長度可動態(tài)改變7.1 7.1 核心接口Java集合框架的核心接口有兩種:Collection(聚集)和Map(映射)Collection 接口是一組允許重復(fù)的對象。Set 中的數(shù)據(jù)對象沒有順序且不可以重復(fù)。 L

3、ist中的數(shù)據(jù)對象有順序且可以重復(fù)Map接口是一組成對的鍵值對象,即所持有的是key-value pairs。Map中不能有重復(fù)的key。擁有自己的內(nèi)部排列機(jī)制7.2 Collection7.2 Collection7.3 List7.3 List7.3 List7.3 ListList接口是Collection的子接口,實(shí)現(xiàn)List接口的容器類中的元素是有順序的,而且可以重復(fù)List 容器中的元素都對應(yīng)一個整數(shù)型的序號記載其在容器中的位置,可以根據(jù)序號存取容器中的元素。7.3 List7.3 ListList 接口中所定義的方法:Object get(int index);Object se

4、t(int index, Object element); void add(int index, Object element); Object remove(int index); int indexOf(Object o);int lastIndexOf(Object o);List接口和ArrayList類 5-1開發(fā)一套小型的新聞管理系統(tǒng),要求如下:可以存儲各類新聞標(biāo)題(包含ID、名稱、創(chuàng)建者、創(chuàng)建時間)可以獲取新聞標(biāo)題的總數(shù)可以逐條打印每條新聞標(biāo)題的名稱存儲方式如何選擇?元素個數(shù)不確定 使用集合類 需要遍歷元素 存儲對象如何確定?類型:新聞標(biāo)題 屬性:ID、名稱、創(chuàng)建者、創(chuàng)建時間

5、List接口和ArrayList類 5-2元素1元素2元素3元素4元素5元素6元素7元素8元素9元素10v第一步,確定存儲方式 1、ArrayList類是List接口的一個具體實(shí)現(xiàn)類2、ArrayList 對象實(shí)現(xiàn)了可變大小的數(shù)組3、隨機(jī)訪問和遍歷元素時,它提供更好的性能當(dāng)元素個數(shù)增加為11個0129345786元素1元素2元素3元素4元素5元素6元素7元素8元素9元素10元素11創(chuàng)建了一個新的數(shù)組,把原數(shù)組中元素復(fù)制進(jìn)來 012934578610根據(jù)下標(biāo)位置訪問元素List接口和ArrayList類 5-3第二步:確定存儲對象1、創(chuàng)建類型:新聞標(biāo)題2、包含屬性: ID、名稱、創(chuàng)建者、創(chuàng)建時間

6、public class FirstLevelTitle private int id; /IDprivate String titleName; /名稱名稱private String creater; /創(chuàng)建者創(chuàng)建者private Date createTime; /創(chuàng)建時間創(chuàng)建時間public FirstLevelTitle(int id, String titleName, String creater,Date createTime) this.id = id;this.titleName = titleName;this.creater = creater;this.createT

7、ime = createTime;public String getTitleName() return titleName;public void setTitleName(String titleName) this.titleName = titleName;List接口和ArrayList類 5-4第三步:具體實(shí)現(xiàn)1、按照順序依次添加各類新聞標(biāo)題2、獲取新聞標(biāo)題的總數(shù)3、根據(jù)位置獲取相應(yīng)新聞標(biāo)題4、逐條打印每條新聞標(biāo)題的名稱public class FirstLevelTitleDB1 public static void main(String args) FirstLevelTit

8、le car = new FirstLevelTitle(1, 汽車, 管理員, new Date();FirstLevelTitle test = new FirstLevelTitle(2, 高考, 管理員, new Date();List newsTitleList = new ArrayList();newsTitleList.add(car);newsTitleList.add(test);System.out.println(新聞標(biāo)題數(shù)目為: + newsTitleList.size() + 條);print(newsTitleList);public static void pr

9、int(List newsList) for (int i = 0; i newsList.size(); i+) FirstLevelTitle title = (FirstLevelTitle) newsList.get(i);System.out.println(i + 1 + : + title.getTitleName();123順序添加,位置從0開始新聞標(biāo)題數(shù)目為:2條1:汽車2:高考控制臺輸出4從集合中取出后為Object類型,需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換ListList接口和ArrayListArrayList類 5-55-5第三步:具體實(shí)現(xiàn)1、在指定的位置添加新聞標(biāo)題2、判斷是否已經(jīng)

10、存儲了某條新聞標(biāo)題3、刪除指定位置處的某一新聞標(biāo)題public class FirstLevelTitleDB2 public static void main(String args) FirstLevelTitle car = new FirstLevelTitle(1, 汽車汽車, 網(wǎng)站管理員網(wǎng)站管理員, new Date();FirstLevelTitle test = new FirstLevelTitle(2, 高考高考, 網(wǎng)站管理員網(wǎng)站管理員, new Date();FirstLevelTitle house = new FirstLevelTitle(3, 房產(chǎn)房產(chǎn), 網(wǎng)站管理

11、員網(wǎng)站管理員, new Date();List newsTitleList = new ArrayList();newsTitleList.add(car);newsTitleList.add(test);newsTitleList.add(2,house);if(newsTitleList.contains(test)System.out.println(有高考的新聞有高考的新聞);elseSystem.out.println(沒有高考的新聞沒有高考的新聞);newsTitleList.remove(1);System.out.println(新聞標(biāo)題數(shù)目為:新聞標(biāo)題數(shù)目為: + newsT

12、itleList.size() + 條條); 123在指定的位置添加元素在指定的位置添加元素 有高考的新聞有高考的新聞新聞標(biāo)題數(shù)目為:新聞標(biāo)題數(shù)目為:2條條控制臺輸出控制臺輸出小結(jié)1創(chuàng)建一個類Account包含屬性賬戶姓名,賬戶性別,賬戶號碼,賬戶密碼,賬戶金額,在構(gòu)造方法中進(jìn)行初始化 添加一個方法show(),用以打印所有屬性的值 創(chuàng)建一個類AccountTest,添加main方法,實(shí)現(xiàn) 創(chuàng)建一個ArrayList,向其中添加幾個Account對象 遍歷該集合,并且對每個Account對象調(diào)用show()方法 7.3.1 LinkedList類List接口和LinkedList類 3-1升級

13、這套小型的新聞管理系統(tǒng),要求如下:可以添加頭條新聞標(biāo)題可以刪除末條新聞標(biāo)題存儲方式如何選擇?元素個數(shù)不確定使用集合類需要在列表的頭或尾添加、刪除元素List接口和LinkedList類 3-2v第一步,確定存儲方式 1、LinkedList類是List接口的一個具體實(shí)現(xiàn)類2、LinkedList 類用于創(chuàng)建鏈表數(shù)據(jù)結(jié)構(gòu)3、插入或者刪除元素時,它提供更好的性能List接口和LinkedList類 3-3第二步:具體實(shí)現(xiàn)1、添加頭條、以及最末條新聞標(biāo)題2、獲取頭條、以及最末條新聞標(biāo)題3、刪除頭條、以及最末條新聞標(biāo)題public class FirstLevelTitleDB3 public sta

14、tic void main(String args) FirstLevelTitle car = new FirstLevelTitle(1, 汽車汽車, 管理員管理員, new Date();FirstLevelTitle medical = new FirstLevelTitle(2, 醫(yī)學(xué)醫(yī)學(xué), 管理員管理員,new Date();LinkedList newsTitleList = new LinkedList();newsTitleList.addFirst(car);newsTitleList.addLast(medical);FirstLevelTitle first = (Fi

15、rstLevelTitle) newsTitleList.getFirst();System.out.println(頭條的新聞標(biāo)題為頭條的新聞標(biāo)題為: + first.getTitleName();FirstLevelTitle last = (FirstLevelTitle) newsTitleList.getLast();System.out.println(排在最后的新聞標(biāo)題為排在最后的新聞標(biāo)題為: + last.getTitleName();newsTitleList.removeFirst();newsTitleList.removeLast(); 123小結(jié)2創(chuàng)建一個類Stack

16、,代表堆棧(其特點(diǎn)為:后進(jìn)先出),添加方法add(Object obj)、以及get(),添加main方法進(jìn)行驗(yàn)證,要求:使用LinkedList實(shí)現(xiàn)堆棧在向LinkedList中添加時,使用addLast方法在從LinkedList中取出時,使用removeLast方法小結(jié)ArrayListArrayList類封裝了一個動態(tài)再分配的類封裝了一個動態(tài)再分配的ObjectObject數(shù)數(shù)組。組。集合框架中保存的都是對象的引用,集合框架中保存的都是對象的引用,不是對象不是對象的備份。這一點(diǎn)尤其重要的備份。這一點(diǎn)尤其重要7.4 Iterator7.4 Iterator接口7.4 Iterator7.

17、4 Iterator接口所有實(shí)現(xiàn)了Collection接口的容器類都有一個iterator方法用以返回一個實(shí)現(xiàn)了Iterator接口的對象。Iterator對象稱作迭代器,用以方便的實(shí)現(xiàn)對容器內(nèi)元素的遍歷操作。Iterator接口定義了如下方法:boolean hasNext(); /判斷游標(biāo)右邊是否有元素Object next(); /返回游標(biāo)右邊的元素并將游標(biāo)移動到下一個位置void remove(); /刪除游標(biāo)左面的元素,在執(zhí)行完next之后該 /操作只能執(zhí)行一次7.4 Iterator7.4 Iterator接口import java.util.*;public class Test

18、 public static void main(String args) Collection c = new HashSet(); c.add(new Name(f1,l1); c.add(new Name(f2,l2); c.add(new Name(f3,l3); Iterator i = c.iterator(); while(i.hasNext() /next()的返回值為Object類型,需要轉(zhuǎn)換為相應(yīng)類型 Name n = (Name)i.next(); System.out.print(n.getFirstName()+ ); 7.4 Iterator7.4 Iterator

19、接口Iterator對象的remove方法是在迭代過程中刪除元素的唯一的安全方法。Collection c = new HashSet();c.add(new Name(fff1,lll1);c.add(new Name(f2,l2);c.add(new Name(fff3,lll3);for(Iterator i = c.iterator();i.hasNext();) Name name =(Name)i.next(); if(name.getFirstName().length()3) i.remove(); /如果換成 c.remove(name); 會產(chǎn)生例外 System.out.

20、println(c);輸出結(jié)果:fff3 lll3, fff1 lll17.4 Iterator7.4 Iterator接口例:刪除列表中所例:刪除列表中所有值為有值為“3 3”的元素。的元素。7.5 Set7.5 SetSet 接口繼承 Collection 接口,它不允許集合中存在重復(fù)項(xiàng), 而且它不象List按照加入列表的順序存儲元素,它有自己的排列法則。 Set 接口Set 接口是Collection的子接口,Set接口沒有提供額外的方法,但實(shí)現(xiàn) Set 接口的容器類中的元素是沒有有順序的,而且不可以重復(fù)Set 容器可以與數(shù)學(xué)中“集合”的概念相對應(yīng)J2SDK API中 所提供的 Set

21、容器類有 HashSet,TreeSet 等Set 方法舉例public static void main(String args) Set s = new HashSet(); s.add(hello); s.add(world); s.add(new Name(f1,f2); s.add(new Integer(100); s.add(new Name(f1,f2); /相同的元素不會被加入 s.add(hello); /相同的元素不會被加入 System.out.println(s);輸出結(jié)果:100, hello, world, f1 f2Set 方法舉例public static v

22、oid main(String args) Set s1 = new HashSet(); Set s2 = new HashSet(); s1.add(a);s1.add(b);s1.add(c); s2.add(d);s2.add(a);s2.add(b); /Set和List容器類都具有Constructor(Collection c) /構(gòu)造方法用以初始化容器類 Set sn = new HashSet(s1); sn.retainAll(s2); Set su = new HashSet(s1); su.addAll(s2); System.out.println(sn); Syst

23、em.out.println(su);輸出結(jié)果:a, b d, a, c, b7.5.1 HashSet7.5.1 HashSet的用法HashSetHashSet的存儲結(jié)構(gòu)是的存儲結(jié)構(gòu)是HashHash表。表。 例:例:HashSetHashSet的基本操作。的基本操作。參看課本例 HashSet7.5.1 HashSet的用法例:用例:用HashSetHashSet過濾自定義類。過濾自定義類。一般認(rèn)為如果學(xué)號一致,就應(yīng)一般認(rèn)為如果學(xué)號一致,就應(yīng)該是同一個人。本例的過濾規(guī)該是同一個人。本例的過濾規(guī)則就是同學(xué)號的學(xué)生將保留一個則就是同學(xué)號的學(xué)生將保留一個。7.5.1 HashS

24、et7.5.1 HashSet的用法接上例接上例7.5.2 LinkedHashSet7.5.2 LinkedHashSet的用法LinkedHashSetLinkedHashSet是是HashSetHashSet的子類,用法和的子類,用法和HashSetHashSet一致。一致。 例:用例:用LinkedHashSetLinkedHashSet實(shí)現(xiàn)例實(shí)現(xiàn)例7.67.6。7.6 Map7.6 MapMapMap接口不是接口不是CollectionCollection接接口的繼承。口的繼承。MapMap接口用于維接口用于維護(hù)鍵護(hù)鍵/ /值對值對(key/value pairs)(key/valu

25、e pairs)。該接口描述了從不重復(fù)的鍵該接口描述了從不重復(fù)的鍵到值的映射。到值的映射。Map 接口實(shí)現(xiàn)Map接口的類用來存儲鍵值 對。Map 接口的實(shí)現(xiàn)類有HashMap和TreeMap等,HashMap通過hashcode對其內(nèi)容進(jìn)行快速查找,而TreeMap中所有的元素都保持著某種固定的順序 。Map類中存儲的鍵值對通過鍵來標(biāo)識,所以鍵值不能重復(fù)Map 接口方法Object put(Object key, Object value);Object get(Object key);Object remove(Object key);boolean containsKey(Object k

26、ey);boolean containsValue(Object value);int size();boolean isEmpty();void putAll(Map t); void clear();Map接口和HashMap類 4-1學(xué)員應(yīng)聘至外企工作,每個學(xué)員都會有一個英文名稱,對應(yīng)該學(xué)員對象 JackJava3班李明班李明RoseJava4班劉麗班劉麗v現(xiàn)在希望通過英文名稱,獲得該學(xué)員對象的詳細(xì)信息,如何實(shí)現(xiàn)?存儲方式如何選擇?存儲方式如何選擇?元素個數(shù)不確定元素個數(shù)不確定使用集合類使用集合類通過通過key(英文名稱)獲得英文名稱)獲得value(學(xué)員對象)(學(xué)員對象)存儲對象如何確

27、定?存儲對象如何確定?類型:學(xué)員類型:學(xué)員屬性:班級、姓名屬性:班級、姓名Map接口和HashMap類 4-2v第一步,確定存儲方式 1、Map接口用于維護(hù)“鍵-值對”的關(guān)聯(lián)性,可以通過鍵查找值2、HashMap是Map接口的一個具體實(shí)現(xiàn)類 Map接口和HashMap類 4-3第二步:確定存儲對象1、創(chuàng)建類型:學(xué)員2、包含屬性:班級名稱、姓名public class Student private String name; / 學(xué)員姓名學(xué)員姓名private String className; / 中心名稱中心名稱public Student(String name, String class

28、Name) = name;this.school = className;public String toString() return className+畢業(yè)的畢業(yè)的+name;重寫重寫Object的的toString()方法,方法,用于輸出調(diào)試和描述信息用于輸出調(diào)試和描述信息Map接口和HashMap類 4-4第三步:具體實(shí)現(xiàn)1、把英文名稱與學(xué)員對象按照“鍵-值對”的方式存儲在HashMap中2、分別打印鍵集、值集、以及鍵-值對集合3、判斷是否存在某個鍵,如果是,則根據(jù)鍵獲取相應(yīng)的值4、根據(jù)鍵、刪除某條記錄public class MapTest public sta

29、tic void main(String args) Student student1 = new Student(李明李明, “Java3); Student student2 = new Student(劉麗劉麗, “Java4); Map students = new HashMap(); students.put(Jack, student1); students.put(Rose, student2); System.out.println(鍵集:鍵集:+students.keySet(); System.out.println(值集值集:+students.values(); Sy

30、stem.out.println(鍵鍵-值對集合值對集合:+students); String key = Jack; if(students.containsKey(key) System.out.println(students.get(key); students.remove(key); System.out.println(鍵鍵-值對集合值對集合:+students); 123鍵集:鍵集:Jack, Rose值集值集: Java3李明李明, java4劉麗劉麗鍵鍵-值對集合值對集合:Jack=Java3李明李明, Rose=Java4劉麗劉麗java3李明李明鍵鍵-值對集合值對集合:Rose=java4劉麗劉麗控制臺輸出控制臺輸出4小結(jié)3創(chuàng)建一個類Book 包含屬性:title(標(biāo)題),使用構(gòu)造方法進(jìn)行初始化 重寫toString()方法,用以返回Title屬性的值 創(chuàng)建一個類BookTest,添加main方法,要求: 使用HashMap進(jìn)行存儲,鍵為Book對象的編號,值為Book對象 通過某一個編號獲取Book對象,并打印該Book對象的標(biāo)題 7.6.1 HashMap7.6.1 HashMapHashMapHashMap是最常使用是最常使用的的MapMap實(shí)現(xiàn)類。實(shí)現(xiàn)類。例:例:使用集合框架注意事項(xiàng)ObjectO

溫馨提示

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

最新文檔

評論

0/150

提交評論