JAVA中的集合框架課件_第1頁
JAVA中的集合框架課件_第2頁
JAVA中的集合框架課件_第3頁
JAVA中的集合框架課件_第4頁
JAVA中的集合框架課件_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

JAVA中的集合框架學(xué)習(xí)內(nèi)容

集合框架的概念Java語言中的集合Collection接口Set接口List接口Map接口目標(biāo)掌握集合框架包含的內(nèi)容掌握ArrayList和LinkedList的使用掌握HashMap的使用掌握Iterator的使用掌握泛型集合的使用學(xué)員1學(xué)員20如何存儲(chǔ)每天的新聞信息?如何存儲(chǔ)計(jì)算機(jī)專業(yè)課程的代碼與課程信息,能夠通過代碼方便地獲得課程信息?如果并不知道程序運(yùn)行時(shí)會(huì)需要多少對(duì)象,或者需要更復(fù)雜方式存儲(chǔ)對(duì)象——可以使用Java集合框架一維數(shù)組代碼1……代碼N課程1……課程N(yùn)一一對(duì)應(yīng)新聞1……新聞N每天的新聞總數(shù)不確定,太少浪費(fèi)空間,太多空間不足存儲(chǔ)一個(gè)班學(xué)員信息,假定一個(gè)班容納20名學(xué)員為什么使用集合框架集合類概述集合類的作用:

Java的集合類提供了一些基本數(shù)據(jù)結(jié)構(gòu)的支持。例如Vector、Hashtable、Stack等。集合類的使用:Java的集合類包含在java.util包中。importjava.util.*;集合類概述集合類特點(diǎn)一:只容納對(duì)象。這一點(diǎn)和數(shù)組不同,數(shù)組可以容納基本數(shù)據(jù)類型數(shù)據(jù)和對(duì)象。如果集合類中想使用基本數(shù)據(jù)類型,又想利用集合類的靈活性,可以把基本數(shù)據(jù)類型數(shù)據(jù)封裝成該數(shù)據(jù)類型的對(duì)象,然后放入集合中處理。集合類概述集合類特點(diǎn)二:集合類容納的對(duì)象都是Object類的實(shí)例,一旦把一個(gè)對(duì)象置入集合類中,它的類信息將丟失,這樣設(shè)計(jì)的目的是為了集合類的通用性。因?yàn)镺bject類是所有類的祖先,所以可以在這些集合中存放任何類的對(duì)象而不受限制,但是切記在使用集合成員之前必須對(duì)它重新造型。什么是集合框架的概念集合框架:是為表示和操作集合而規(guī)定的一種統(tǒng)一的、標(biāo)準(zhǔn)的體系結(jié)構(gòu)。任何集合框架都包含三大塊內(nèi)容:對(duì)外的接口、接口的實(shí)現(xiàn)和對(duì)集合運(yùn)算的算法。接口:即表示集合的抽象數(shù)據(jù)類型。接口提供了讓我們對(duì)集合中所表示的內(nèi)容進(jìn)行單獨(dú)操作的可能。實(shí)現(xiàn):也就是集合框架中接口的具體實(shí)現(xiàn)。實(shí)際它們就是那些可復(fù)用的數(shù)據(jù)結(jié)構(gòu)。算法:在一個(gè)實(shí)現(xiàn)了某個(gè)集合框架中的接口的對(duì)象上,完成某種有用的計(jì)算的方法,例如查找、排序等。集合框架對(duì)編程有什么好處呢?提高程序設(shè)計(jì)效率。提高程序速度和質(zhì)量。集合框架通過提供對(duì)有用的數(shù)據(jù)結(jié)構(gòu)和算法的高性能和高質(zhì)量的實(shí)現(xiàn)使你的程序速度和質(zhì)量得到提高。集合框架鼓勵(lì)軟件的復(fù)用。對(duì)于遵照標(biāo)準(zhǔn)集合框架接口的新的數(shù)據(jù)結(jié)構(gòu)是可復(fù)用的。1接口CollectionListMap2具體類ArrayListLinkedListHashMap3算法Java集合框架為我們提供了一套性能優(yōu)良、使用方便的接口和類,它們位于java.util包中我們不必再重新發(fā)明輪子,只需學(xué)會(huì)如何使用它們,就可處理實(shí)際應(yīng)用中問題Collections提供了對(duì)集合進(jìn)行排序、遍歷等多種算法實(shí)現(xiàn)Java集合框架包含的內(nèi)容SetTreeSetHashSetTreeMapJava集合框架包含的內(nèi)容Collection接口存儲(chǔ)一組不唯一,無序的對(duì)象List接口存儲(chǔ)一組不唯一,有序(插入順序)的對(duì)象Set接口存儲(chǔ)一組唯一,無序的對(duì)象Map接口存儲(chǔ)一組鍵值對(duì)象,提供key到value的映射

CollectionListMapSetList接口的實(shí)現(xiàn)類ArrayList實(shí)現(xiàn)了長度可變的數(shù)組,在內(nèi)存中分配連續(xù)的空間。遍歷元素和隨機(jī)訪問元素的效率比較高LinkedList采用鏈表存儲(chǔ)方式。插入、刪除元素時(shí)效率比較高ListArrayListLinkedListListList的明顯特征是它的元素都有一個(gè)確定的順序。實(shí)現(xiàn)它的類有ArrayList和LinkedList。ArrayList內(nèi)存中是順序存儲(chǔ)的。LinkedList內(nèi)存中是以鏈表方式存儲(chǔ)的。2114List(列表)0123ArrayList集合類存儲(chǔ)多條狗狗信息,獲取狗狗總數(shù),逐條打印出各條狗狗信息通過List接口的實(shí)現(xiàn)類ArrayList實(shí)現(xiàn)該需求元素個(gè)數(shù)不確定要求獲得元素的實(shí)際個(gè)數(shù)按照存儲(chǔ)順序獲取并打印元素信息ArrayList集合類publicclassTest1{ publicstaticvoidmain(String[]args){ DogououDog=newDog("歐歐","雪娜瑞"); DogyayaDog=newDog("亞亞","拉布拉多"); DogmeimeiDog=newDog("美美","雪娜瑞"); DogfeifeiDog=newDog("菲菲","拉布拉多");

Listdogs=newArrayList();

dogs.add(ououDog); dogs.add(yayaDog); dogs.add(meimeiDog);

dogs.add(2,feifeiDog);//添加feifeiDog到指定位置

System.out.println("共計(jì)有"+dogs.size()+"條狗狗。");

System.out.println("分別是:"); for(inti=0;i<dogs.size();i++){ Dogdog=(Dog)dogs.get(i); System.out.println(dog.getName()+"\t"+dog.getStrain()); } }}創(chuàng)建ArrayList對(duì)象并把四個(gè)狗狗對(duì)象放入其中輸出狗狗的數(shù)量獲取第i個(gè)元素

ArrayList舉例importjava.util.*;publicclassArrayListDemo{publicstaticvoidmain(String[]argv){

ArrayListal=newArrayList();//AddlotsofelementstotheArrayList...

al.add(newInteger(11));

al.add(newInteger(12));

al.add(newInteger(13));

al.add(new

String("hello"));//Firstprintthemoutusingaforloop.

System.out.println("Retrievingbyindex:");for(inti=0;i<al.size();i++){

System.out.println("Element"+i+"="+al.get(i));}}}LinkedList類舉例:importjava.util.*;publicclassLinkedListDemo{publicstaticvoidmain(String[]argv){

LinkedListl=newLinkedList();

l.add(newObject());

l.add("Hello");

l.add("zhangsan");

ListIterator

li=l.listIterator(0);while(li.hasNext())

System.out.println(li.next());if(l.indexOf("Hello")<0)

System.err.println("Lookupdoesnotwork");else

System.err.println("Lookupworks");}}補(bǔ)充練習(xí)一功能描述:使用ArrayList類保存飯店信息,創(chuàng)建三個(gè)飯店的對(duì)象保存到ArrayList中,然后遍歷集合輸出顯示,當(dāng)一個(gè)飯店從ArrayList中刪除后,重新輸出剩下的飯店集合,效果如下圖所示補(bǔ)充案例二創(chuàng)建一個(gè)類Cat包含屬性name,在構(gòu)造方法中進(jìn)行初始化添加一個(gè)方法show(),用以打印name屬性的值創(chuàng)建一個(gè)類CatTest,添加main方法,實(shí)現(xiàn)創(chuàng)建一個(gè)ArrayList,向其中添加幾個(gè)Cat對(duì)象遍歷該集合,并且對(duì)每個(gè)Cat對(duì)象調(diào)用show()方法ArrayList集合類擴(kuò)充以下幾部分功能刪除指定位置的狗狗,如第一個(gè)狗狗刪除指定的狗狗,如刪除feifeiDog對(duì)象判斷集合中是否包含指定狗狗List接口提供相應(yīng)方法remove()、contains(),直接使用即可ArrayList集合類publicclassTest2{ publicstaticvoidmain(String[]args){ //1、創(chuàng)建多個(gè)狗狗對(duì)象 … //2、創(chuàng)建ArrayList集合對(duì)象并把多個(gè)狗狗對(duì)象放入其中 …

System.out.println("刪除之前共計(jì)有"+dogs.size()+"條狗狗。");

dogs.remove(0);

dogs.remove(feifeiDog);

System.out.println("\n刪除之后還有"+dogs.size()+"條狗狗。"); …

if(dogs.contains(meimeiDog)) System.out.println("\n集合中包含美美的信息"); else System.out.println("\n集合中不包含美美的信息"); }}刪除第一個(gè)狗狗和feifeiDog判斷是否包含指定狗狗ArrayList集合類List接口常用方法

方法名說明booleanadd(Objecto)在列表的末尾順序添加元素,起始索引位置從0開始voidadd(intindex,Objecto)在指定的索引位置添加元素。索引位置必須介于0和列表中元素個(gè)數(shù)之間intsize()返回列表中的元素個(gè)數(shù)Objectget(intindex)返回指定索引位置處的元素。取出的元素是Object類型,使用前需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換booleancontains(Objecto)判斷列表中是否存在指定元素booleanremove(Objecto)從列表中刪除元素Object remove(intindex)從列表中刪除指定位置元素,起始索引位置從0開始LinkedList集合類在集合任何位置(頭部、中間、尾部)添加、獲取、刪除狗狗對(duì)象插入、刪除操作頻繁時(shí),可使用LinkedList來提高效率LinkedList還額外提供對(duì)頭部和尾部元素進(jìn)行添加和刪除操作的方法LinkedList集合類3-2publicclassTest3{ publicstaticvoidmain(String[]args){ …//創(chuàng)建多個(gè)狗狗對(duì)象

LinkedListdogs=newLinkedList(); dogs.add(ououDog); dogs.add(yayaDog);

dogs.addLast(meimeiDog); dogs.addFirst(feifeiDog);

DogdogFirst=(Dog)dogs.getFirst(); System.out.println("第一條狗狗昵稱是"+dogFirst.getName());

DogdogLast=(Dog)dogs.getLast(); System.out.println("最后一條狗狗昵稱是"+dogLast.getName());

dogs.removeFirst(); dogs.removeLast();

}}創(chuàng)建LinkedList集合對(duì)象并把多個(gè)狗狗對(duì)象放入其中獲取第一條狗狗信息獲取最后一條狗狗信息刪除第一個(gè)狗狗和最后一個(gè)狗狗 LinkedList集合類LinkedList的特殊方法方法名說明void addFirst(Objecto)在列表的首部添加元素void addLast(Objecto)在列表的末尾添加元素Object getFirst()返回列表中的第一個(gè)元素Object getLast()返回列表中的最后一個(gè)元素Object removeFirst()刪除并返回列表中的第一個(gè)元素Object removeLast()刪除并返回列表中的最后一個(gè)元素補(bǔ)充練習(xí)三功能描述:使用LinkedList保存人員信息,并調(diào)用相關(guān)方法實(shí)現(xiàn)輸出顯示。效果如圖所示:補(bǔ)充案例四創(chuàng)建一個(gè)類Stack,代表堆棧(其特點(diǎn)為:后進(jìn)先出),添加方法add(Objectobj)、以及delete(),添加main方法進(jìn)行驗(yàn)證,要求:使用LinkedList實(shí)現(xiàn)堆棧在向LinkedList中添加時(shí),使用addLast()方法在從LinkedList中取出時(shí),使用removeLast()方法集合框架中的接口集合框架中的接口Collection:集合層次中的根接口,JDK沒有提供這個(gè)接口直接的實(shí)現(xiàn)類。Set:不能包含重復(fù)的元素。SortedSet是一個(gè)按照升序排列元素的Set。List:是一個(gè)有序的集合,可以包含重復(fù)的元素。提供了按索引訪問的方式。Map:包含了key-value對(duì)。Map不能包含重復(fù)的key。SortedMap是一個(gè)按照升序排列key的Map。CollectionSetSet中的元素必須唯一。添加到Set中的元素必須定義equals方法,以提供算法來判斷欲添加進(jìn)來的對(duì)象是否與已經(jīng)存在的某對(duì)象相等,從而建立對(duì)象的唯一性。實(shí)現(xiàn)Set接口的類有HashSet,TreeSet。4627351Set集SetSet舉例importjava.util.*;publicclassSetDemo{publicstaticvoidmain(String[]argv){

HashSeth=newHashSet();//也可以Seth=newHashSet()

h.add("One");

h.add("Two");

h.add("One");//DUPLICATE

h.add("Three");

Iteratorit=h.iterator();while(it.hasNext()){

System.out.println(it.next());}}}Map接口建立國家英文簡稱和中文全名間的鍵值映射,并通過key對(duì)value進(jìn)行操作,應(yīng)該如何實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)和操作呢?Map接口專門處理鍵值映射數(shù)據(jù)的存儲(chǔ),可以根據(jù)鍵實(shí)現(xiàn)對(duì)值的操作最常用的實(shí)現(xiàn)類是HashMapMap接口3-2publicclassTest4{ publicstaticvoidmain(String[]args){

Mapcountries=newHashMap();

countries.put("CN","中華人民共和國"); countries.put("RU","俄羅斯聯(lián)邦"); countries.put("FR","法蘭西共和國"); countries.put("US","美利堅(jiān)合眾國");

Stringcountry=(String)countries.get("CN"); System.out.println("CN對(duì)應(yīng)的國家是:"+country);

System.out.println("Map中共有"+countries.size()+"組數(shù)據(jù)");

countries.remove("FR"); System.out.println("Map中包含F(xiàn)R的key嗎?"+

countries.containsKey("FR"));

System.out.println(countries.keySet()); System.out.println(countries.values()); System.out.println(countries); }}使用HashMap存儲(chǔ)多組鍵值對(duì)獲取Map元素個(gè)數(shù)刪除指定元素,判斷是否包含指定元素顯示鍵集、值集和鍵值對(duì)集獲取指定元素的值Map接口Map接口常用方法方法名說明Objectput(Objectkey,Objectval)以“鍵-值對(duì)”的方式進(jìn)行存儲(chǔ)Objectget(Objectkey)根據(jù)鍵返回相關(guān)聯(lián)的值,如果不存在指定的鍵,返回nullObjectremove(Objectkey)刪除由指定的鍵映射的“鍵-值對(duì)”intsize()返回元素個(gè)數(shù)SetkeySet()返回鍵的集合Collectionvalues()返回值的集合boolean containsKey(Objectkey)如果存在由指定的鍵映射的“鍵-值對(duì)”,返回true集合類對(duì)比Vector和ArrayList的異同實(shí)現(xiàn)原理相同,功能相同,很多情況下可以互用兩者的主要區(qū)別如下Vector線程安全,ArrayList重速度輕安全,線程非安全長度需增長時(shí),Vector默認(rèn)增長一倍,ArrayList增長50%Hashtable和HashMap的異同實(shí)現(xiàn)原理相同,功能相同,在很多情況下可以互用兩者的主要區(qū)別如下Hashtable繼承Dictionary類,HashMap實(shí)現(xiàn)Map接口Hashtable線程安全,HashMap線程非安全Hashtable不允許null值,HashMap允許null值開發(fā)過程中,最好使用ArrayList和HashMap練習(xí)——根據(jù)寵物昵稱查找寵物需求說明:根據(jù)寵物昵稱查找對(duì)應(yīng)寵物,如果找到,顯示寵物信息,否則給出錯(cuò)誤提示迭代器Iterator如何遍歷List集合呢?方法1:通過for循環(huán)和get()方法配合實(shí)現(xiàn)遍歷方法2:通過迭代器Iterator實(shí)現(xiàn)遍歷所有集合接口和類都沒有提供相應(yīng)遍歷方法,而是由Iterator實(shí)現(xiàn)集合遍歷Collection接口的iterate()方法返回一個(gè)Iterator,然后通過Iterator接口的兩個(gè)方法可實(shí)現(xiàn)遍歷booleanhasNext():判斷是否存在另一個(gè)可訪問的元素Objectnext():返回要訪問的下一個(gè)元素迭代器Iterator2-2publicclassTest5{ publicstaticvoidmain(String[]args){ //1、創(chuàng)建多個(gè)狗狗對(duì)象 DogououDog=newDog("歐歐","雪娜瑞"); … //2、創(chuàng)建ArrayList集合對(duì)象并把多個(gè)狗狗對(duì)象放入其中 Listdogs=newArrayList(); dogs.add(ououDog); …

System.out.println("使用Iterator遍歷,所有狗狗昵稱和品種是:");

Iteratorit=dogs.iterator(); while(it.hasNext()){ Dogdog=(Dog)it.next(); System.out.println(dog.getName()+"\t"+dog.getStrain()); } }}通過迭代器依次輸出所有狗狗的信息練習(xí)——迭代List中企鵝信息需求說明:使用ArrayList和LinkedList存儲(chǔ)多個(gè)企鵝信息,然后統(tǒng)一使用Iterator進(jìn)行遍歷泛型集合把任何類型對(duì)象通過add(Objectobj)放入List中,認(rèn)為只是Object類型通過get(intindex)取出List中元素時(shí)必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換,繁瑣而且容易出現(xiàn)異常使用Map的put(Objectkey,Objectvalue)和get(Objectkey)存取對(duì)象時(shí)存在同樣問題使用Iterator的next()方法獲取元素時(shí)存在同樣問題JDK5.0中通過引入泛型有效的解決了這個(gè)問題JDK5.0使用泛型改寫了集合框架中的所有接口和類泛型集合3-2publicclassTest6{ publicstaticvoidmain(String[]args){ //1、創(chuàng)建多個(gè)狗狗對(duì)象 Dogdog1=newDog("歐歐","雪娜瑞"); … //2、創(chuàng)建ArrayList集合對(duì)象并把多個(gè)狗狗對(duì)象放入其中 List<Dog>dogs=newArrayList<Dog>

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論