泛型與集合框架ppt課件_第1頁
泛型與集合框架ppt課件_第2頁
泛型與集合框架ppt課件_第3頁
泛型與集合框架ppt課件_第4頁
泛型與集合框架ppt課件_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第12章泛型與集合框架 12.1 泛型泛型 泛型泛型Generics是在是在JDK1.5中推出的,其主中推出的,其主要目的是可以建立具有類型平安的集合框架,如要目的是可以建立具有類型平安的集合框架,如鏈表、散列映射等數(shù)據(jù)構(gòu)造鏈表、散列映射等數(shù)據(jù)構(gòu)造 泛型的目的泛型的目的 Java泛型的主要目的是可以建立具有類型平安泛型的主要目的是可以建立具有類型平安的數(shù)據(jù)構(gòu)造,如鏈表、散列表等數(shù)據(jù)構(gòu)造,最重的數(shù)據(jù)構(gòu)造,如鏈表、散列表等數(shù)據(jù)構(gòu)造,最重要的一個優(yōu)點就是:在運用這些泛型類建立的數(shù)要的一個優(yōu)點就是:在運用這些泛型類建立的數(shù)據(jù)構(gòu)造時,不用進展強迫類型轉(zhuǎn)換,即不要求進據(jù)構(gòu)造時,不用進展強迫類型轉(zhuǎn)換,即不要

2、求進展運轉(zhuǎn)時類型檢查。展運轉(zhuǎn)時類型檢查。 JDK1.5是支持泛型的編譯器,它將運轉(zhuǎn)時的類是支持泛型的編譯器,它將運轉(zhuǎn)時的類型檢查提早到編譯時執(zhí)行,使代碼更平安。型檢查提早到編譯時執(zhí)行,使代碼更平安。12.1.1 泛型類泛型類 可以運用可以運用“class 稱號稱號聲明一個類,聲明一個類,為了和普通的類有所區(qū)別,這樣聲明的類稱作泛為了和普通的類有所區(qū)別,這樣聲明的類稱作泛型類,如:型類,如: class ShowObject E是其中的泛型,也就是并沒有指定是其中的泛型,也就是并沒有指定E是何種類是何種類型型 泛型類的類體和和普通類的類體完全類似,由成泛型類的類體和和普通類的類體完全類似,由成員

3、變量和方法構(gòu)成員變量和方法構(gòu)成 舉例舉例public class ShowObjectpublic showMess(E b) String mess=b.toString(); System.out.println(mess); 12.1.2 泛型類聲明對象泛型類聲明對象 和普通的類相比,泛型類聲明和創(chuàng)建對象時,類和普通的類相比,泛型類聲明和創(chuàng)建對象時,類名后多了一對名后多了一對“,而且必需求用詳細(xì)的類型,而且必需求用詳細(xì)的類型交換交換“中的泛型。中的泛型。 Dog.java public class Dog public String toString() return Cat.java

4、public class Cat public String toString() return 一只小花貓一只小花貓; public class Example12_1 public static void main(String args ) ShowObject showDog = new ShowObject(); showDog.showMess(new Dog(); ShowObject showCat = new ShowObject(); showCat.showMess(new Cat(); 闡明闡明 泛型類中的泛型變量只能調(diào)用泛型類中的泛型變量只能調(diào)用Object類中的方法

5、,類中的方法,因此因此Cat和和Dog類都重寫了類都重寫了Object類的類的toString()方法。方法。12.1.3 泛型接口泛型接口 可以運用可以運用“interface 稱號稱號聲明一個聲明一個接口,這樣聲名的接口稱作泛型接口如接口,這樣聲名的接口稱作泛型接口如 interface Listen void listen(E x); 注:普通類實現(xiàn)泛型接口時,必需指定泛型接口注:普通類實現(xiàn)泛型接口時,必需指定泛型接口中泛型列表中的詳細(xì)類型中泛型列表中的詳細(xì)類型例例12-2interface Listen void listen(E x);class Student implements

6、 Listen public void listen(Piano p) p.play(); class Teacher implements Listen public void listen(Violin v) v.play(); class Piano public void play() System.out.println(鋼琴協(xié)奏曲鋼琴協(xié)奏曲:黃河黃河); class Violin public void play() System.out.println(小提琴協(xié)奏曲小提琴協(xié)奏曲:梁祝梁祝); public class Example12_2 public static void

7、main(String args ) Student zhang=new Student(); System.out.println(學(xué)生聽學(xué)生聽:); zhang.listen(new Piano(); Teacher teacher=new Teacher(); System.out.println(教師聽教師聽:); teacher.listen(new Violin(); Java集合框架集合框架 在在Java言語中,設(shè)計者對常用的數(shù)據(jù)構(gòu)造和算言語中,設(shè)計者對常用的數(shù)據(jù)構(gòu)造和算法做了一些規(guī)范接口和實現(xiàn)詳細(xì)實現(xiàn)接口法做了一些規(guī)范接口和實現(xiàn)詳細(xì)實現(xiàn)接口的類。的類。 一切籠統(tǒng)出來的數(shù)據(jù)構(gòu)造和

8、算法統(tǒng)稱為一切籠統(tǒng)出來的數(shù)據(jù)構(gòu)造和算法統(tǒng)稱為Java集集合框架合框架 Java程序員在詳細(xì)運用時,不用思索數(shù)據(jù)構(gòu)造程序員在詳細(xì)運用時,不用思索數(shù)據(jù)構(gòu)造和算法實現(xiàn)細(xì)節(jié),只需求用這些類創(chuàng)建出來的一和算法實現(xiàn)細(xì)節(jié),只需求用這些類創(chuàng)建出來的一些對象,然后直接運用就可以了,提高了編程效些對象,然后直接運用就可以了,提高了編程效率率Java 容器類容器類 容器類可以大大提高編程效率和編程才干容器類可以大大提高編程效率和編程才干 Java2容器類類庫的用途是容器類類庫的用途是“保管對象,它分保管對象,它分為兩類:為兩類: Collection-一組獨立的元素,通常這些元素一組獨立的元素,通常這些元素都服從某

9、種規(guī)那么。都服從某種規(guī)那么。List必需堅持元素特定的順必需堅持元素特定的順序,而序,而Set不能有反復(fù)元素。不能有反復(fù)元素。 Map-一組成對的一組成對的“鍵值對對象,即其元素是鍵值對對象,即其元素是成對的對象成對的對象集合框架的層次構(gòu)造集合框架的層次構(gòu)造闡明闡明 Collection是集合接口,集合框架的根是集合接口,集合框架的根,代表一組代表一組Object Set子接口:里面的元素不允許反復(fù)子接口:里面的元素不允許反復(fù) List子接口:里面的元素可以反復(fù)子接口:里面的元素可以反復(fù)闡明闡明 Set和和List對比:對比: Set:檢索元素效率低下,刪除和插入效率高。:檢索元素效率低下,刪

10、除和插入效率高。 插入和刪除不會引起元素位置改動插入和刪除不會引起元素位置改動 List:和數(shù)組類似,:和數(shù)組類似,List可以動態(tài)增長,查找元可以動態(tài)增長,查找元素效率高。素效率高。闡明闡明 Set的子類:的子類: HashSet 以哈希表的方式存放元素,插入刪除速度很快以哈希表的方式存放元素,插入刪除速度很快 TreeSet 堅持次序的堅持次序的Set,底層為樹構(gòu)造。運用它可以從,底層為樹構(gòu)造。運用它可以從Set中提取有序的序列。中提取有序的序列。 List的子類:的子類: ArrayList:動態(tài)數(shù)組順序構(gòu)造:動態(tài)數(shù)組順序構(gòu)造 LinkedList:鏈表鏈?zhǔn)綐?gòu)造:鏈表鏈?zhǔn)綐?gòu)造12.2 鏈

11、表鏈表 鏈表是由假設(shè)干個稱作節(jié)點的對象組成的一種數(shù)鏈表是由假設(shè)干個稱作節(jié)點的對象組成的一種數(shù)據(jù)構(gòu)造,每個節(jié)點含有一個數(shù)據(jù)和下一個節(jié)點的據(jù)構(gòu)造,每個節(jié)點含有一個數(shù)據(jù)和下一個節(jié)點的援用,或含有一個數(shù)據(jù)并含有上一個節(jié)點的援用援用,或含有一個數(shù)據(jù)并含有上一個節(jié)點的援用和下一個節(jié)點的援用和下一個節(jié)點的援用 數(shù)據(jù)數(shù)據(jù)援用援用援用援用數(shù)據(jù)數(shù)據(jù)null援用援用數(shù)據(jù)數(shù)據(jù)援用援用援用援用數(shù)據(jù)數(shù)據(jù)援用援用 null圖圖12.3 雙鏈表表示圖雙鏈表表示圖12.2.1 LinkedList泛型類泛型類 java.util包中的包中的LinkedList泛型類創(chuàng)建的對泛型類創(chuàng)建的對象以鏈表構(gòu)造存儲數(shù)據(jù),習(xí)慣上稱象以鏈表構(gòu)

12、造存儲數(shù)據(jù),習(xí)慣上稱LinkedList類類創(chuàng)建的對象為鏈表對象。例如,創(chuàng)建的對象為鏈表對象。例如, LinkedList list = new LinkedList(); 創(chuàng)建一個空雙鏈表。創(chuàng)建一個空雙鏈表。 運用運用LinkedList泛型類聲明創(chuàng)建鏈表時,必泛型類聲明創(chuàng)建鏈表時,必需求指定需求指定E的詳細(xì)類型,然后鏈表就可以運用的詳細(xì)類型,然后鏈表就可以運用add(E obj)方法向鏈表依次添加節(jié)點方法向鏈表依次添加節(jié)點 舉例舉例 list.add(“他好他好); list.add(“十一高興十一高興); list.add(“留意休憩留意休憩); 此時,鏈表里有此時,鏈表里有3個節(jié)點,節(jié)

13、點自動鏈接在一同個節(jié)點,節(jié)點自動鏈接在一同12.2.2 常用方法常用方法 以下是以下是LinkedList泛型類實現(xiàn)泛型類實現(xiàn)Lis泛型接口中泛型接口中的一些常用方法。的一些常用方法。 public boolean add(E element) public void add(int index ,E element) public void clear() public E remove(int index) public boolean remove(E element) public E get(int index) public int indexOf(E element) publi

14、c int lastIndexOf(E element) public E set(int index ,E element) public int size() public boolean contains(Object element) 以下是以下是LinkedList泛型類本身新添加的一些泛型類本身新添加的一些常用方法常用方法 public void addFirst(E element) public void addLast(E element) public E getFirst() public E getLast() public E removeFirst() public

15、 E removeLast() public Object clone() 12.2.3 遍歷鏈表遍歷鏈表 當(dāng)用戶需求遍歷集合中的對象時,該當(dāng)運用該集當(dāng)用戶需求遍歷集合中的對象時,該當(dāng)運用該集合提供的迭代器,而不是讓集合本身來遍歷其中合提供的迭代器,而不是讓集合本身來遍歷其中的對象。由于迭代器遍歷集合的方法在找到集合的對象。由于迭代器遍歷集合的方法在找到集合中的一個對象的同時,也得到待遍歷的后繼對象中的一個對象的同時,也得到待遍歷的后繼對象的援用,因此迭代器可以快速地遍歷集合。的援用,因此迭代器可以快速地遍歷集合。什么是迭代器什么是迭代器 迭代器是一個實現(xiàn)了迭代器是一個實現(xiàn)了Iterator接

16、口的類的對象接口的類的對象 一切實現(xiàn)了一切實現(xiàn)了Collection接口的類都有一個稱號為接口的類都有一個稱號為iterator的方法來獲取迭代器的方法來獲取迭代器 鏈表對象可以運用鏈表對象可以運用iterator()方法獲取一個方法獲取一個Iterator對象,該對象就是針對當(dāng)前鏈表的迭代對象,該對象就是針對當(dāng)前鏈表的迭代器器 next方法:前往迭代器中的一個元素方法:前往迭代器中的一個元素 hasNext方法:假設(shè)容器里還有元素,那么為方法:假設(shè)容器里還有元素,那么為true例例12-3 import java.util.*; public class Example12_3 public

17、 static void main(String args ) List list=new LinkedList(); list.add(大家好大家好); list.add(國慶國慶60周年周年); list.add(十一高興十一高興); Iterator iter=list.iterator(); while(iter.hasNext() String te=iter.next(); System.out.print(te+ ); System.out.println(); long endTime=System.currentTimeMillis(); for(int i=0;ilist.

18、size();i+) String te=list.get(i); System.out.print(te+ ); JDK1.5之前沒有泛型的之前沒有泛型的LinkedList類,可以用類,可以用普通的普通的LinkedList創(chuàng)建一個鏈表對象,如創(chuàng)建一個鏈表對象,如 LinkedList mylist=new LinkedList(); 然后然后mylist鏈表可以運用鏈表可以運用add(Object obj)方法方法向這個鏈表依次添加節(jié)點。由于任何類都是向這個鏈表依次添加節(jié)點。由于任何類都是Object類的子類,因此可以把任何一個對象作為類的子類,因此可以把任何一個對象作為鏈表節(jié)點中的對象

19、鏈表節(jié)點中的對象 運用集合框架本卷須知沒有運用泛型運用集合框架本卷須知沒有運用泛型ObjectObjectObject參與集合參與集合從集合中取出從集合中取出(Rabbit) object(Car) object(Student) objectRabbitCarStudentRabbitCarStudent任何對象參與集合類后,自動轉(zhuǎn)變?yōu)槿魏螌ο髤⑴c集合類后,自動轉(zhuǎn)變?yōu)镺bjectObject類型;取出類型;取出時,需求進展強迫類型轉(zhuǎn)換,恢復(fù)為特定的類型時,需求進展強迫類型轉(zhuǎn)換,恢復(fù)為特定的類型 例例12-4 運用了運用了JDK1.5版本之前的版本之前的LinkedList12.2.4 排序與

20、查找排序與查找 假設(shè)鏈表中的數(shù)據(jù)是實現(xiàn)了假設(shè)鏈表中的數(shù)據(jù)是實現(xiàn)了Comparable接口的接口的類的實例,比如類的實例,比如String對象,那么對象,那么Java.util包中包中的的Collections類調(diào)用類調(diào)用sort(List list)方法可方法可以對參數(shù)指定的列表進展排序,即按節(jié)點中的存以對參數(shù)指定的列表進展排序,即按節(jié)點中的存儲的對象的大小升序陳列節(jié)點。儲的對象的大小升序陳列節(jié)點。 Collections類類 留意區(qū)分和留意區(qū)分和Collection接口的的區(qū)別接口的的區(qū)別 Collections是一個類,該類里的是一個類,該類里的 方法都是靜態(tài)方法都是靜態(tài)的方法,主要是用來

21、對集合的操作的。的方法,主要是用來對集合的操作的。 是個非常有用的類是個非常有用的類 String類實現(xiàn)了泛型接口類實現(xiàn)了泛型接口Comparable中的中的compareTo(E b)方法,使得字符串可以按字典方法,使得字符串可以按字典序比較大小,假設(shè)一個鏈表序比較大小,假設(shè)一個鏈表list如下添加節(jié)點:如下添加節(jié)點: list.add(bird); list.add(apple); list.add(cat); 那么用那么用sort方法排序方法排序list: Collection.sort(list); 之后,之后,list中三個節(jié)點中的數(shù)據(jù)將依次是中三個節(jié)點中的數(shù)據(jù)將依次是apple,b

22、ird和和cat。如何比較兩個對象如何比較兩個對象 一個類可以實現(xiàn)泛型接口一個類可以實現(xiàn)泛型接口Comparable中的中的comareTo(E b)方法來指定該類實例相互比較大小關(guān)方法來指定該類實例相互比較大小關(guān)系的準(zhǔn)那么,實現(xiàn)系的準(zhǔn)那么,實現(xiàn)Comparable接口類創(chuàng)建的對接口類創(chuàng)建的對象可以調(diào)用象可以調(diào)用compareTo(E b)方法和參數(shù)指定的對象方法和參數(shù)指定的對象比較大小關(guān)系。假設(shè)比較大小關(guān)系。假設(shè)a和和b是實現(xiàn)是實現(xiàn)Comparable接接口類創(chuàng)建的兩個對象,當(dāng)口類創(chuàng)建的兩個對象,當(dāng) apareTo(b)0 時,稱時,稱a大于大于b, apareTo(b)=0, 時,稱時,稱

23、a等于等于b。如何查找一個對象如何查找一個對象 當(dāng)鏈表節(jié)點中的對象是實現(xiàn)泛型接口當(dāng)鏈表節(jié)點中的對象是實現(xiàn)泛型接口Comparable的類的實例時,就可以運用的類的實例時,就可以運用sort方法對鏈表進展排序操作。方法對鏈表進展排序操作。 有時需求查找鏈表中能否含有和指定數(shù)據(jù)相等的有時需求查找鏈表中能否含有和指定數(shù)據(jù)相等的數(shù)據(jù),那么首先要對鏈表排序,然后運用數(shù)據(jù),那么首先要對鏈表排序,然后運用Collections類里的類里的 public static int binarySearch(List list, T key) 查找鏈表中能否含有和數(shù)據(jù)查找鏈表中能否含有和數(shù)據(jù)key相等的數(shù)據(jù)相等的數(shù)

24、據(jù) 12-512.2.5 洗牌與旋轉(zhuǎn)洗牌與旋轉(zhuǎn) Collections類還提供了將鏈表中的數(shù)據(jù)重新隨類還提供了將鏈表中的數(shù)據(jù)重新隨機陳列的類方法以及旋轉(zhuǎn)鏈表中數(shù)據(jù)的類方法,機陳列的類方法以及旋轉(zhuǎn)鏈表中數(shù)據(jù)的類方法,方法的詳細(xì)解釋如下方法的詳細(xì)解釋如下 public static void shuffle(List list):隨機:隨機陳列陳列l(wèi)ist中的節(jié)點。中的節(jié)點。 static void rotate(List list, int distance):旋轉(zhuǎn):旋轉(zhuǎn)鏈表中的節(jié)點,調(diào)用該方法后,鏈表中的節(jié)點,調(diào)用該方法后,list索引為索引為i的節(jié)點中的節(jié)點中的數(shù)據(jù)將是調(diào)用該方法前索引為的數(shù)

25、據(jù)將是調(diào)用該方法前索引為(i-distance) mod list.size()的節(jié)點中的數(shù)據(jù)。的節(jié)點中的數(shù)據(jù)。 例如,假設(shè)例如,假設(shè)list節(jié)點數(shù)據(jù)依次為:節(jié)點數(shù)據(jù)依次為:a b c d e,那么執(zhí),那么執(zhí)行行Collections.rotate(list,1)之后,之后,list節(jié)點數(shù)據(jù)依次節(jié)點數(shù)據(jù)依次為為e a b c d。當(dāng)方法的參數(shù)。當(dāng)方法的參數(shù)distance取正值時,向右取正值時,向右轉(zhuǎn)動轉(zhuǎn)動list中的數(shù)據(jù),取負(fù)值時向左轉(zhuǎn)動中的數(shù)據(jù),取負(fù)值時向左轉(zhuǎn)動list中的數(shù)據(jù)。中的數(shù)據(jù)。圖圖12.6 洗牌與旋轉(zhuǎn)洗牌與旋轉(zhuǎn) public static void reverse(List l

26、ist):翻轉(zhuǎn):翻轉(zhuǎn)list中的數(shù)據(jù)。假設(shè)中的數(shù)據(jù)。假設(shè)list節(jié)點中的數(shù)據(jù)依次為:節(jié)點中的數(shù)據(jù)依次為:a b c d e,那么在那么在Collections.reverse(list)之后,之后,list節(jié)點中的節(jié)點中的數(shù)據(jù)依次為數(shù)據(jù)依次為e d c b a。 12-6,12-7 12-7:假設(shè)干個人圍成一圈,從某個人開場順時:假設(shè)干個人圍成一圈,從某個人開場順時針數(shù)到第針數(shù)到第3個人,該人叢圈中退出,然后繼續(xù)順個人,該人叢圈中退出,然后繼續(xù)順時針數(shù)到第時針數(shù)到第3個人,該人從圈中退出,依次類推,個人,該人從圈中退出,依次類推,程序輸出圈中最后剩下的人程序輸出圈中最后剩下的人12.3 堆棧堆

27、棧 堆棧是一種堆棧是一種“后進先出的數(shù)據(jù)構(gòu)造后進先出的數(shù)據(jù)構(gòu)造 運用運用java.util包中的包中的Stack泛型類創(chuàng)建一個泛型類創(chuàng)建一個堆棧對象,堆棧對象可以運用堆棧對象,堆棧對象可以運用 public E push(E item); 實現(xiàn)壓棧操作。運用實現(xiàn)壓棧操作。運用 public E pop(); 實現(xiàn)出棧操作。實現(xiàn)出棧操作。 運用運用 public boolean empty(); 判別堆棧能否還有數(shù)據(jù),有數(shù)據(jù)前往判別堆棧能否還有數(shù)據(jù),有數(shù)據(jù)前往false ,否,否那么前往那么前往true。運用。運用 public E peek(); 獲取堆棧頂端的數(shù)據(jù),但不刪除該數(shù)據(jù)。運用獲取堆

28、棧頂端的數(shù)據(jù),但不刪除該數(shù)據(jù)。運用 public int search(Object data); 獲取數(shù)據(jù)在堆棧中的位置,最頂端的位置是,獲取數(shù)據(jù)在堆棧中的位置,最頂端的位置是,向下依次添加,假設(shè)堆棧不含此數(shù)據(jù),那么前往向下依次添加,假設(shè)堆棧不含此數(shù)據(jù),那么前往-1。12-8Fibonacci數(shù)列,用棧實現(xiàn)數(shù)列,用棧實現(xiàn)12.4 散列映射散列映射:HashMap 關(guān)于關(guān)于Map: 實現(xiàn)實現(xiàn)Map接口的對象會將鍵接口的對象會將鍵Key)映射至值映射至值Value 值指的是要存入容器的對象。值指的是要存入容器的對象。 在將對象存入在將對象存入Map對象時,需求同時給定一個鍵,對象時,需求同時給定

29、一個鍵,要取回對象時可以指定,這樣就可以獲得與鍵對要取回對象時可以指定,這樣就可以獲得與鍵對應(yīng)的對象值。應(yīng)的對象值。 Map中每一個鍵都是獨一的,不能有反復(fù)的鍵。中每一個鍵都是獨一的,不能有反復(fù)的鍵。 Map擁有本人的排序機制擁有本人的排序機制Map承繼關(guān)系承繼關(guān)系MapSortedMapHashtableLinkedHashMapHashMapTreeMap12.4.1 HashMap泛型類泛型類 HashMap泛型類實現(xiàn)了泛型接口泛型類實現(xiàn)了泛型接口Map,HashMap類中的絕大部分方類中的絕大部分方法都是法都是Map接口方法的實現(xiàn)。接口方法的實現(xiàn)。 編程時,可以運用接口回調(diào)技術(shù),即把編

30、程時,可以運用接口回調(diào)技術(shù),即把HashMap對象的援用賦值給對象的援用賦值給Map接接口變量,那么接口變量就可以調(diào)用類實現(xiàn)的接口口變量,那么接口變量就可以調(diào)用類實現(xiàn)的接口方法方法 HashMap對象采用散列表這種數(shù)據(jù)構(gòu)造對象采用散列表這種數(shù)據(jù)構(gòu)造存儲數(shù)據(jù),習(xí)慣上稱存儲數(shù)據(jù),習(xí)慣上稱HashMap對象為散對象為散列映射或哈希映射。散列映射用于存儲列映射或哈希映射。散列映射用于存儲“鍵鍵/值值對,允許把任何數(shù)量的對,允許把任何數(shù)量的“鍵鍵/值對存儲在一同。值對存儲在一同。鍵不可以發(fā)生邏輯沖突,即不要兩個數(shù)據(jù)項運用鍵不可以發(fā)生邏輯沖突,即不要兩個數(shù)據(jù)項運用一樣的鍵,假設(shè)出現(xiàn)兩個數(shù)據(jù)項對應(yīng)一樣的鍵,

31、一樣的鍵,假設(shè)出現(xiàn)兩個數(shù)據(jù)項對應(yīng)一樣的鍵,那么,先前散列映射中的那么,先前散列映射中的“鍵鍵/值對將被交換值對將被交換 HashMap中常用方法中常用方法 public V put(K key,V value) 該方法將鍵值對對象存放到映射中該方法將鍵值對對象存放到映射中 public V get(Object key) 前往散列映射中運前往散列映射中運用用key做鍵的做鍵的“鍵鍵/值對中的值值對中的值 import java.util.*; public class HashMapDemopublic static void main(String args)Map map1=new Has

32、hMap();String key1=book;String key2=apple;map1.put(key1,書書);map1.put(key2,蘋果蘋果);System.out.println(map1.get(key1);System.out.println(map1.get(key2); HashMap中常用方法中常用方法 public void clear() 清空散列映射。清空散列映射。 public Object clone() 前往當(dāng)前散列映射的一個克隆。前往當(dāng)前散列映射的一個克隆。 public boolean containsKey(Object key) 假設(shè)散列映射有假

33、設(shè)散列映射有“鍵鍵/值對運用了參數(shù)指定的鍵,方法前往值對運用了參數(shù)指定的鍵,方法前往true,否那么前往,否那么前往false。 public boolean containsValue(Object value) 假設(shè)散列映射假設(shè)散列映射有有“鍵鍵/值對的值是參數(shù)指定的值,方法前往值對的值是參數(shù)指定的值,方法前往true,否那么前,否那么前往往false。 public boolean isEmpty() 假設(shè)散列映射不含任何假設(shè)散列映射不含任何“鍵鍵/值值對,方法前往對,方法前往true,否那么前往,否那么前往false。 public V remove(Object key) 刪除散列映

34、射中鍵為參數(shù)指定刪除散列映射中鍵為參數(shù)指定的的“鍵鍵/值對,并前往鍵對應(yīng)的值。值對,并前往鍵對應(yīng)的值。 public int size() 前往散列映射的大小,即散列映射中前往散列映射的大小,即散列映射中“鍵鍵/值值對的數(shù)目。對的數(shù)目。12.4.3 遍歷散列映射遍歷散列映射 HashMap類里:類里:public Collection values()方法前往一個實現(xiàn)方法前往一個實現(xiàn)Collection接口類創(chuàng)建的接口類創(chuàng)建的對象,其中包括一切值對象。對象,其中包括一切值對象。 可以運用接口回調(diào)技術(shù),即將該對象的援用賦給可以運用接口回調(diào)技術(shù),即將該對象的援用賦給Collection接口變量,該

35、接口變量可以回調(diào)接口變量,該接口變量可以回調(diào)iterator()方法獲取一個方法獲取一個Iterator對象,這個對象,這個Iterator對象存放著散列映射中一切對象存放著散列映射中一切“鍵鍵/值對值對中的中的“值值 import java.util.*; public class HashMapDemopublic static void main(String args)Map map1=new HashMap();map1.put(book,書書);map1.put(apple,蘋果蘋果);map1.put(Language,言語言語);Collection c1=map1.value

36、s();Iterator it1=c1.iterator();while(it1.hasNext() System.out.println(it1.next();System.out.println();for(String s:map1.values() System.out.println(s); 思索思索 1輸出的次序并不是按當(dāng)初參與的次序輸出輸出的次序并不是按當(dāng)初參與的次序輸出的的 2假設(shè)想要在迭代一切的對象時,按照插入假設(shè)想要在迭代一切的對象時,按照插入的順序來陳列,那么可以運用的順序來陳列,那么可以運用LinkedHashMap,它是它是HashMap的子類。的子類。 3只需是實現(xiàn)

37、只需是實現(xiàn)Collection接口的對象,都可接口的對象,都可以運用加強的以運用加強的for循環(huán)功能來迭代一切的值循環(huán)功能來迭代一切的值12.4.3 基于散列映射的查詢基于散列映射的查詢 對于經(jīng)常需求進展查找的數(shù)據(jù)可以采用散列映射對于經(jīng)常需求進展查找的數(shù)據(jù)可以采用散列映射來存儲這樣的數(shù)據(jù),即為數(shù)據(jù)指定一個查找它的來存儲這樣的數(shù)據(jù),即為數(shù)據(jù)指定一個查找它的關(guān)鍵字,然后按著關(guān)鍵字,然后按著“健健-值對,將關(guān)鍵字和數(shù)據(jù)值對,將關(guān)鍵字和數(shù)據(jù)一并存入散列映射中一并存入散列映射中 例例12-9 英語單詞查詢的運用程序英語單詞查詢的運用程序12.5 樹集樹集 12.5.1 TreeSet泛型類泛型類 Tre

38、eSet類是實現(xiàn)類是實現(xiàn)Set接口和接口和SortedSet接口接口的類的類 SortedSet提供的方法讓他有序得取出對應(yīng)位置提供的方法讓他有序得取出對應(yīng)位置的對象。的對象。 TreeSet類創(chuàng)建的對象稱作樹集。類創(chuàng)建的對象稱作樹集。樹集樹集 樹集采用樹構(gòu)造存儲數(shù)據(jù),樹節(jié)點中的數(shù)據(jù)會按樹集采用樹構(gòu)造存儲數(shù)據(jù),樹節(jié)點中的數(shù)據(jù)會按存放的數(shù)據(jù)的存放的數(shù)據(jù)的“大小順序一層一層地依次陳列,大小順序一層一層地依次陳列,在同一層中的節(jié)點從左到右按字從小大遞增陳列,在同一層中的節(jié)點從左到右按字從小大遞增陳列,下一層的都比上一層的小下一層的都比上一層的小 運用運用 import java.util.*; pu

39、blic class TreeSetDemo1 public static void main(String args)Set set1=new TreeSet();set1.add(book);set1.add(boy);set1.add(apple);set1.add(zoo);for(String name:set1) System.out.println(name); 闡明闡明 由于參與的由于參與的String對象,執(zhí)行結(jié)果會自動按照字對象,執(zhí)行結(jié)果會自動按照字典順序進展陳列。典順序進展陳列。 按照字典順序來陳列按照字典順序來陳列String對象是對象是TreeSet默許默許的的12.

40、5.2 節(jié)點的大小關(guān)系節(jié)點的大小關(guān)系 當(dāng)一個樹集中的數(shù)據(jù)是實現(xiàn)當(dāng)一個樹集中的數(shù)據(jù)是實現(xiàn)Comparable泛型泛型接口類創(chuàng)建的對象時,節(jié)點就按對象的大小關(guān)系接口類創(chuàng)建的對象時,節(jié)點就按對象的大小關(guān)系順序陳列順序陳列12.5.3 TreeSet類的常用方法類的常用方法 public boolean add(E o) 向樹集添加加節(jié)點,節(jié)點中的數(shù)據(jù)向樹集添加加節(jié)點,節(jié)點中的數(shù)據(jù)由參數(shù)指定,添加勝利前往由參數(shù)指定,添加勝利前往true,否那么前往,否那么前往false。 public void clear() 刪除樹集中的一切節(jié)點。刪除樹集中的一切節(jié)點。 public void contains(O

41、bject o) 假設(shè)樹集中有包含參數(shù)指定假設(shè)樹集中有包含參數(shù)指定的對象,該方法前往的對象,該方法前往true,否那么前往,否那么前往false 。 public E first() 前往樹集中的第一個節(jié)點中的數(shù)據(jù)最小的節(jié)前往樹集中的第一個節(jié)點中的數(shù)據(jù)最小的節(jié)點。點。 public E last() 前往最后一個節(jié)點中的數(shù)據(jù)最大的節(jié)點。前往最后一個節(jié)點中的數(shù)據(jù)最大的節(jié)點。 public isEmpty() 判別能否是空樹集,假設(shè)樹集不含任何節(jié)點,判別能否是空樹集,假設(shè)樹集不含任何節(jié)點,該方法前往該方法前往true 。 public boolean remove(Object o) 刪除樹集中的存儲參數(shù)指刪除樹集中的存儲參數(shù)指定的對象的最小節(jié)點,假設(shè)刪除勝利,該方法前往定的對象的最小節(jié)點,假設(shè)刪除勝利,該方法前往true,否那,否那么前往么前往false。 public int size() 前往樹集中節(jié)點的數(shù)目前往樹集中節(jié)點的數(shù)目 例例12-10 樹集

溫馨提示

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

評論

0/150

提交評論