




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
JAVA中的集合框架學(xué)習(xí)內(nèi)容
集合框架的概念Java語(yǔ)言中的集合Collection接口Set接口List接口Map接口目標(biāo)掌握集合框架包含的內(nèi)容掌握ArrayList和LinkedList的使用掌握HashMap的使用掌握Iterator的使用掌握泛型集合的使用學(xué)員1學(xué)員20如何存儲(chǔ)每天的新聞信息?如何存儲(chǔ)計(jì)算機(jī)專(zhuān)業(yè)課程的代碼與課程信息,能夠通過(guò)代碼方便地獲得課程信息?如果并不知道程序運(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é)員為什么使用集合框架集合類(lèi)概述集合類(lèi)的作用:
Java的集合類(lèi)提供了一些基本數(shù)據(jù)結(jié)構(gòu)的支持。例如Vector、Hashtable、Stack等。集合類(lèi)的使用:Java的集合類(lèi)包含在java.util包中。importjava.util.*;集合類(lèi)概述集合類(lèi)特點(diǎn)一:只容納對(duì)象。這一點(diǎn)和數(shù)組不同,數(shù)組可以容納基本數(shù)據(jù)類(lèi)型數(shù)據(jù)和對(duì)象。如果集合類(lèi)中想使用基本數(shù)據(jù)類(lèi)型,又想利用集合類(lèi)的靈活性,可以把基本數(shù)據(jù)類(lèi)型數(shù)據(jù)封裝成該數(shù)據(jù)類(lèi)型的對(duì)象,然后放入集合中處理。集合類(lèi)概述集合類(lèi)特點(diǎn)二:集合類(lèi)容納的對(duì)象都是Object類(lèi)的實(shí)例,一旦把一個(gè)對(duì)象置入集合類(lèi)中,它的類(lèi)信息將丟失,這樣設(shè)計(jì)的目的是為了集合類(lèi)的通用性。因?yàn)镺bject類(lèi)是所有類(lèi)的祖先,所以可以在這些集合中存放任何類(lèi)的對(duì)象而不受限制,但是切記在使用集合成員之前必須對(duì)它重新造型。什么是集合框架的概念集合框架:是為表示和操作集合而規(guī)定的一種統(tǒng)一的、標(biāo)準(zhǔn)的體系結(jié)構(gòu)。任何集合框架都包含三大塊內(nèi)容:對(duì)外的接口、接口的實(shí)現(xiàn)和對(duì)集合運(yùn)算的算法。接口:即表示集合的抽象數(shù)據(jù)類(lèi)型。接口提供了讓我們對(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ì)量。集合框架通過(guò)提供對(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具體類(lèi)ArrayListLinkedListHashMap3算法Java集合框架為我們提供了一套性能優(yōu)良、使用方便的接口和類(lèi),它們位于java.util包中我們不必再重新發(fā)明輪子,只需學(xué)會(huì)如何使用它們,就可處理實(shí)際應(yīng)用中問(wèn)題Collections提供了對(duì)集合進(jìn)行排序、遍歷等多種算法實(shí)現(xiàn)Java集合框架包含的內(nèi)容SetTreeSetHashSetTreeMapJava集合框架包含的內(nèi)容Collection接口存儲(chǔ)一組不唯一,無(wú)序的對(duì)象List接口存儲(chǔ)一組不唯一,有序(插入順序)的對(duì)象Set接口存儲(chǔ)一組唯一,無(wú)序的對(duì)象Map接口存儲(chǔ)一組鍵值對(duì)象,提供key到value的映射
CollectionListMapSetList接口的實(shí)現(xiàn)類(lèi)ArrayList實(shí)現(xiàn)了長(zhǎng)度可變的數(shù)組,在內(nèi)存中分配連續(xù)的空間。遍歷元素和隨機(jī)訪問(wèn)元素的效率比較高LinkedList采用鏈表存儲(chǔ)方式。插入、刪除元素時(shí)效率比較高ListArrayListLinkedListListList的明顯特征是它的元素都有一個(gè)確定的順序。實(shí)現(xiàn)它的類(lèi)有ArrayList和LinkedList。ArrayList內(nèi)存中是順序存儲(chǔ)的。LinkedList內(nèi)存中是以鏈表方式存儲(chǔ)的。2114List(列表)0123ArrayList集合類(lèi)存儲(chǔ)多條狗狗信息,獲取狗狗總數(shù),逐條打印出各條狗狗信息通過(guò)List接口的實(shí)現(xiàn)類(lèi)ArrayList實(shí)現(xiàn)該需求元素個(gè)數(shù)不確定要求獲得元素的實(shí)際個(gè)數(shù)按照存儲(chǔ)順序獲取并打印元素信息ArrayList集合類(lèi)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類(lèi)舉例: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類(lèi)保存飯店信息,創(chuàng)建三個(gè)飯店的對(duì)象保存到ArrayList中,然后遍歷集合輸出顯示,當(dāng)一個(gè)飯店從ArrayList中刪除后,重新輸出剩下的飯店集合,效果如下圖所示補(bǔ)充案例二創(chuàng)建一個(gè)類(lèi)Cat包含屬性name,在構(gòu)造方法中進(jìn)行初始化添加一個(gè)方法show(),用以打印name屬性的值創(chuàng)建一個(gè)類(lèi)CatTest,添加main方法,實(shí)現(xiàn)創(chuàng)建一個(gè)ArrayList,向其中添加幾個(gè)Cat對(duì)象遍歷該集合,并且對(duì)每個(gè)Cat對(duì)象調(diào)用show()方法ArrayList集合類(lèi)擴(kuò)充以下幾部分功能刪除指定位置的狗狗,如第一個(gè)狗狗刪除指定的狗狗,如刪除feifeiDog對(duì)象判斷集合中是否包含指定狗狗List接口提供相應(yīng)方法remove()、contains(),直接使用即可ArrayList集合類(lèi)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集合類(lèi)List接口常用方法
方法名說(shuō)明booleanadd(Objecto)在列表的末尾順序添加元素,起始索引位置從0開(kāi)始voidadd(intindex,Objecto)在指定的索引位置添加元素。索引位置必須介于0和列表中元素個(gè)數(shù)之間intsize()返回列表中的元素個(gè)數(shù)Objectget(intindex)返回指定索引位置處的元素。取出的元素是Object類(lèi)型,使用前需要進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換booleancontains(Objecto)判斷列表中是否存在指定元素booleanremove(Objecto)從列表中刪除元素Object remove(intindex)從列表中刪除指定位置元素,起始索引位置從0開(kāi)始LinkedList集合類(lèi)在集合任何位置(頭部、中間、尾部)添加、獲取、刪除狗狗對(duì)象插入、刪除操作頻繁時(shí),可使用LinkedList來(lái)提高效率LinkedList還額外提供對(duì)頭部和尾部元素進(jìn)行添加和刪除操作的方法LinkedList集合類(lèi)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("第一條狗狗昵稱(chēng)是"+dogFirst.getName());
DogdogLast=(Dog)dogs.getLast(); System.out.println("最后一條狗狗昵稱(chēng)是"+dogLast.getName());
dogs.removeFirst(); dogs.removeLast();
…
}}創(chuàng)建LinkedList集合對(duì)象并把多個(gè)狗狗對(duì)象放入其中獲取第一條狗狗信息獲取最后一條狗狗信息刪除第一個(gè)狗狗和最后一個(gè)狗狗 LinkedList集合類(lèi)LinkedList的特殊方法方法名說(shuō)明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è)類(lèi)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沒(méi)有提供這個(gè)接口直接的實(shí)現(xiàn)類(lèi)。Set:不能包含重復(fù)的元素。SortedSet是一個(gè)按照升序排列元素的Set。List:是一個(gè)有序的集合,可以包含重復(fù)的元素。提供了按索引訪問(wèn)的方式。Map:包含了key-value對(duì)。Map不能包含重復(fù)的key。SortedMap是一個(gè)按照升序排列key的Map。CollectionSetSet中的元素必須唯一。添加到Set中的元素必須定義equals方法,以提供算法來(lái)判斷欲添加進(jìn)來(lái)的對(duì)象是否與已經(jīng)存在的某對(duì)象相等,從而建立對(duì)象的唯一性。實(shí)現(xiàn)Set接口的類(lèi)有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接口建立國(guó)家英文簡(jiǎn)稱(chēng)和中文全名間的鍵值映射,并通過(guò)key對(duì)value進(jìn)行操作,應(yīng)該如何實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)和操作呢?Map接口專(zhuān)門(mén)處理鍵值映射數(shù)據(jù)的存儲(chǔ),可以根據(jù)鍵實(shí)現(xiàn)對(duì)值的操作最常用的實(shí)現(xiàn)類(lèi)是HashMapMap接口3-2publicclassTest4{ publicstaticvoidmain(String[]args){
Mapcountries=newHashMap();
countries.put("CN","中華人民共和國(guó)"); countries.put("RU","俄羅斯聯(lián)邦"); countries.put("FR","法蘭西共和國(guó)"); countries.put("US","美利堅(jiān)合眾國(guó)");
Stringcountry=(String)countries.get("CN"); System.out.println("CN對(duì)應(yīng)的國(guó)家是:"+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接口常用方法方法名說(shuō)明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集合類(lèi)對(duì)比Vector和ArrayList的異同實(shí)現(xiàn)原理相同,功能相同,很多情況下可以互用兩者的主要區(qū)別如下Vector線程安全,ArrayList重速度輕安全,線程非安全長(zhǎng)度需增長(zhǎng)時(shí),Vector默認(rèn)增長(zhǎng)一倍,ArrayList增長(zhǎng)50%Hashtable和HashMap的異同實(shí)現(xiàn)原理相同,功能相同,在很多情況下可以互用兩者的主要區(qū)別如下Hashtable繼承Dictionary類(lèi),HashMap實(shí)現(xiàn)Map接口Hashtable線程安全,HashMap線程非安全Hashtable不允許null值,HashMap允許null值開(kāi)發(fā)過(guò)程中,最好使用ArrayList和HashMap練習(xí)——根據(jù)寵物昵稱(chēng)查找寵物需求說(shuō)明:根據(jù)寵物昵稱(chēng)查找對(duì)應(yīng)寵物,如果找到,顯示寵物信息,否則給出錯(cuò)誤提示迭代器Iterator如何遍歷List集合呢?方法1:通過(guò)for循環(huán)和get()方法配合實(shí)現(xiàn)遍歷方法2:通過(guò)迭代器Iterator實(shí)現(xiàn)遍歷所有集合接口和類(lèi)都沒(méi)有提供相應(yīng)遍歷方法,而是由Iterator實(shí)現(xiàn)集合遍歷Collection接口的iterate()方法返回一個(gè)Iterator,然后通過(guò)Iterator接口的兩個(gè)方法可實(shí)現(xiàn)遍歷booleanhasNext():判斷是否存在另一個(gè)可訪問(wèn)的元素Objectnext():返回要訪問(wèn)的下一個(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遍歷,所有狗狗昵稱(chēng)和品種是:");
Iteratorit=dogs.iterator(); while(it.hasNext()){ Dogdog=(Dog)it.next(); System.out.println(dog.getName()+"\t"+dog.getStrain()); } }}通過(guò)迭代器依次輸出所有狗狗的信息練習(xí)——迭代List中企鵝信息需求說(shuō)明:使用ArrayList和LinkedList存儲(chǔ)多個(gè)企鵝信息,然后統(tǒng)一使用Iterator進(jìn)行遍歷泛型集合把任何類(lèi)型對(duì)象通過(guò)add(Objectobj)放入List中,認(rèn)為只是Object類(lèi)型通過(guò)get(intindex)取出List中元素時(shí)必須進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換,繁瑣而且容易出現(xiàn)異常使用Map的put(Objectkey,Objectvalue)和get(Objectkey)存取對(duì)象時(shí)存在同樣問(wèn)題使用Iterator的next()方法獲取元素時(shí)存在同樣問(wèn)題JDK5.0中通過(guò)引入泛型有效的解決了這個(gè)問(wèn)題JDK5.0使用泛型改寫(xiě)了集合框架中的所有接口和類(lèi)泛型集合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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 腮腺腫瘤CT診斷
- 常用的避孕方法及護(hù)理
- 病人透析護(hù)理指南
- 2025年杭州西湖區(qū)市場(chǎng)監(jiān)督管理局招聘考試筆試試題(含答案)
- 送別教學(xué)課件
- 真心英雄教學(xué)課件
- scratch編程教學(xué)課件
- 認(rèn)識(shí)蔬菜教學(xué)課件
- 房間說(shuō)課課件
- 敬畏生命說(shuō)課課件
- 山東青島市李滄區(qū)2023-2024學(xué)年七年級(jí)下學(xué)期期末考試英語(yǔ)試題
- 遭遇暴徒的應(yīng)急預(yù)案及流程
- 《城市排水管渠數(shù)字化檢測(cè)與評(píng)估技術(shù)規(guī)程》
- 醫(yī)保基金監(jiān)管培訓(xùn)課件
- 穿越華裾-中華服飾之美智慧樹(shù)知到期末考試答案2024年
- 咳喘疾病中氣道重塑的機(jī)制及治療靶點(diǎn)研究
- 藥店人際關(guān)系建設(shè)與溝通技巧培訓(xùn)
- 機(jī)電安裝質(zhì)量檢測(cè)報(bào)告
- 30道醫(yī)院眼科醫(yī)生崗位高頻面試問(wèn)題附考察點(diǎn)及參考回答
- 北師大版數(shù)學(xué)小學(xué)二年級(jí)下冊(cè)期末無(wú)紙筆化檢測(cè)題
- 利盟ms823dn維修手冊(cè)
評(píng)論
0/150
提交評(píng)論