集合類-補(bǔ)充案例_第1頁
集合類-補(bǔ)充案例_第2頁
集合類-補(bǔ)充案例_第3頁
集合類-補(bǔ)充案例_第4頁
集合類-補(bǔ)充案例_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效第七章集合案例7-1Collection接口對(duì)集合的操作一、案例描述1、考核知識(shí)點(diǎn)編號(hào):00107002名稱:Collection接口2、練習(xí)目標(biāo)掌握Collection接口中方法的使用3、需求分析Collection是所有單列集合的父接口,在Collection中定義了單列集合(List和Set)通用的一些方法。為了讓初學(xué)者熟悉Collection接口中的常用方法,本案例將演示Collection接口中的方法對(duì)集合進(jìn)行操作來學(xué)習(xí)方法的使用。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理)1)編寫一個(gè)類Example012)在類中定義兩個(gè)Collection集合,并向其中一個(gè)集合中添加數(shù)據(jù)3)用Collection接口中的方法對(duì)定義的兩個(gè)集合進(jìn)行各種操作二、案例實(shí)現(xiàn)importjava.util.*;publicclassExample01{publicstaticvoidmain(String[]args){//定義集合Collectioncol1=newArrayList();col1.add("123abc");col1.add(123);col1.add(34.121);Collectioncol2=newArrayList();//判斷集合是否為空booleana=col1.isEmpty();booleanb=col2.isEmpty();System.out.println("col1集合是否為空:"+a);System.out.println("col2集合是否為空:"+b);//將集合col1中的元素添加到col2中col2.addAll(col1);System.out.println("col1集合中的元素添加至Ucol2后,col2集合:"+col2);

博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效//獲取兩個(gè)集合的交集booleanc=col1.retainAll(col2);System.out.println("col1和col2集合是否有交集:"+c);//清除集合col2中的元素col2.clear();System.out.println("清除集合col2中的元素后,col2集合::"+col2);//獲取集合中元素的個(gè)數(shù)intsize=col1.size();System.out.println("col1集合中元素的個(gè)數(shù):"+size);))運(yùn)行結(jié)果如圖7-1所示。|區(qū)管注員:福今探親存yM,12]LiLl除urite.FMW*.□■iR|區(qū)管注員:福今探親存yM,12]LiLl除urite.FMW*.□■iR2oI「-I.<1-soJEh露井TpE1-AAisn:anpleP-ack-acre>£!lhaiat£rW7>圖7-1運(yùn)行結(jié)果三案例總結(jié)、1、Collection是所有單列集合的父接口,因此在Collection中定義了單列集合(List和Set)通用的一些方法,這些方法可用于操作所有的單列集合,如表7-1所示。表7-1Collection中的方法方法聲明功能描述booleanadd(Objecto)向集合中添加一個(gè)元素booleanaddAll(Collectionc)將指定Collection中的所有元素添加到該集合中voidclear()刪除該集合中的所有元素booleanremove(Objecto)刪除該集合中指定的元素booleanremoveAll(Collectionc)刪除指定集合中的所有元素booleanisEmpty()判斷該集合是否為空booleancontains(Objecto)判斷該集合中是否包含某個(gè)元素booleancontainsAll(Collectionc)判斷該集合中是否包含指定集合中的所有元素Iteratoriterator()返回在該集合的元素上進(jìn)行迭代的迭代器(Iterator),用于遍歷該集合所有元素intsize()獲取該集合元素個(gè)數(shù)2、在編譯案例時(shí),會(huì)得到如圖7-2所示的警告,意思是說在使用ArrayList集合時(shí)并沒有顯示的指定集合中存儲(chǔ)什么類型的元素,會(huì)產(chǎn)生安全隱患,這涉及到泛型安全機(jī)制的問題。此警告對(duì)程序輸出結(jié)果沒有影響。7aiFi|p'lePackagr'E-'M21haptejawacEx-anipl^iHl?jauia:Exaiwple01..jaua:九用~天/h:土上:一譴『:眉丁.三訓(xùn)「亡.;";’用Xlintzuncheeked博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效圖7-2編譯警告3、在編寫程序時(shí),不要忘記使用importjava.util.*;語句導(dǎo)包,否則程序?qū)?huì)編譯失敗,顯示類找不到。案例7-2 List接口的特有方法一、案例描述1、考核知識(shí)點(diǎn)編號(hào):00107003名稱:List接口2、練習(xí)目標(biāo)掌握List接口的常用方法的使用3、需求分析List作為Collection集合的子接口,不但繼承了Collection接口中的全部方法,而且還增加了一些根據(jù)元素索引來操作集合的特有方法。為了熟悉List接口中特有方法的使用,本案例將演示使用List接口中的方法對(duì)List集合進(jìn)行添加、修改等操作。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理)1)編寫一個(gè)類Example022)在類中定義兩個(gè)list集合,并向其中一個(gè)集合中添加數(shù)據(jù)。3)用subList(intfromIndex,inttoIndex)方法獲取集合的一部分4)用set(intindex,Eelement)方法修改一個(gè)元素5)用add(intindex,Eelement)方法增加一個(gè)元素二、案例實(shí)現(xiàn)importjava.util.*;publicclassExample02{publicstaticvoidmain(String[]args){Listlist=newArrayList();list.add("abc1"); //add()方法添加元素list.add("abc2");list.add("abc3");list.add("abc4");System.out.println(list);ListnewList=list.subList(0,2);//subList()方法獲取集合的前兩個(gè)元素System.out.println(newList);Objecto=list.set(0,"haha");//set方法修改指定位置元素值為hahaSystem.out.println(list);System.out.println(o);list.add(0,"QQ");//add()方法在集合指定位置增加一個(gè)元素QQSystem.out.println(list);)博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效運(yùn)行結(jié)果如圖7-3所示。圖7-3運(yùn)行結(jié)果三、案例總結(jié)1、在List集合中允許出現(xiàn)重復(fù)的元素,所有的元素是以一種線性方式進(jìn)行存儲(chǔ)的,在程序中可以通過索引來訪問集合中的指定元素。另外,List集合還有一個(gè)特點(diǎn)就是元素有序,即元素的存入順序和取出順序一致。2、List作為Collection集合的子接口,不但繼承了Collection接口中的全部方法,而且還增加了一些根據(jù)元素索引來操作集合的特有方法,如表7-2所示。表7-2List接口中的常見方法方法聲明功能描述voidadd(intindex,Objectelement)將元素element插入在List集合的index處booleanaddAll(intindex,Collectionc)將集合c所包含的所有元素插入到List集合的index處Objectget(intindex)返回集合索引index處的元素Objectremove(intindex)刪除index索引處的元素Objectset(intindex,Objectelement)將索引index處元素替換成element對(duì)象,并將替換后的元素返回intindexOf(Objecto)返回對(duì)象o在List集合中出現(xiàn)的位置索引intlastIndexOf(Objecto)返回對(duì)象o在List集合中最后一次出現(xiàn)的位置索引ListsubList(intfromIndex,inttoIndex)返回從索引fromIndex(包括)到toIndex(不包括)處所有元素集合組成的子集合案例7-3ArrayList集合的存取一、案例描述1、考核知識(shí)點(diǎn)編號(hào):00107004名稱:ArrayList集合2、練習(xí)目標(biāo)>了解ArrayList集合的特點(diǎn)> 掌握對(duì)ArrayList集合中元素的存取操作3、需求分析ArrayList是List接口的一個(gè)實(shí)現(xiàn)類,ArrayList集合中大部分方法都是從父類Collection和博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效List繼承過來的。為了熟悉ArrayList集合的使用,本案例將演示ArrayList集合的定義、存儲(chǔ)元素和取出元素。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理)1)編寫一個(gè)類Example032)在類中定義一個(gè)ArrayList集合3)用add()方法向集合中添加元素4)用get()方法獲取集合中的指定元素,由于ArrayList集合的索引的取值范圍是從0開始的,最后一個(gè)索引是size-1。所以,要獲取集合中的第2個(gè)元素應(yīng)該是get(1)。二、案例實(shí)現(xiàn)importjava.util.*;publicclassExample03{publicstaticvoidmain(String[]args){ArrayListarray=newArrayList();array.add("lisi");array.add("wangwu");array.add("jordan");array.add("jackson");array.add("white");System.out.println(array);System.out.println("M2個(gè)元素是:"+array.get(1));))運(yùn)行結(jié)果如圖7-4所示。圖7-4運(yùn)行結(jié)果三、案例總結(jié)1、在ArrayList內(nèi)部封裝了一個(gè)長度可變的數(shù)組對(duì)象,當(dāng)存入的元素超過數(shù)組長度時(shí),ArrayList會(huì)在內(nèi)存中分配一個(gè)更大的數(shù)組來存儲(chǔ)這些元素,因此可以將ArrayList集合看作一個(gè)長度可變的數(shù)組。2、索引位置為1的元素是集合中的第二個(gè)元素,這就說明集合和數(shù)組一樣,索引的取值范圍是從0開始的,最后一個(gè)索引是size-1,在訪問元素時(shí)一定要注意索引不可超出此范圍,否則會(huì)拋出角標(biāo)越界異常IndexOutOfBoundsException。3、由于ArrayList集合的底層是使用一個(gè)數(shù)組來保存元素,在增加或刪除指定位置的元素時(shí),會(huì)導(dǎo)致創(chuàng)建新的數(shù)組,效率比較低,因此不適合做大量的增刪操作。但這種數(shù)組的結(jié)構(gòu)允許程序通過索引的方式來訪問元素,因此使用ArrayList集合查找元素很便捷。博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效案例7-4LinkedList集合的特殊方法一、案例描述1、考核知識(shí)點(diǎn)編號(hào):00107005名稱:LinkedList集合2、練習(xí)目標(biāo)>了解LinkedList集合的特點(diǎn)掌握LinkedList集合的特殊方法的使用3、需求分析ArrayList集合在查詢?cè)貢r(shí)速度很快,但在增刪元素時(shí)效率較低,為了克服這種局限性,可以使用List接口的另一個(gè)實(shí)現(xiàn)類LinkedListoLinkedList集合除了對(duì)于元素的增刪操作具有很高的效率,還專門針對(duì)元素的增刪操作定義了一些特有的方法。為了熟悉這些特殊的方法,本案例將演示如何使用LinkedList中的特殊方法對(duì)集合進(jìn)行增刪操作。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理)1)編寫一個(gè)類Example04,在該類中定義一個(gè)LinkedList集合2)分別使用addFirst()和addLast()方法向集合中添加元素3)使用peekFirst()方法獲取集合中的第一個(gè)元素4)使用pollFirst()方法獲取并移除集合中的第一個(gè)元素5)使用pollLast()方法獲取并移除集合中的最后一個(gè)元素6)此時(shí),集合中應(yīng)該沒有元素了,用peekLast()方法獲取集合中的最后一個(gè)元素,由于集合為空,應(yīng)該返回NULL二、案例實(shí)現(xiàn)importjava.util.*;publicclassExample04{publicstaticvoidmain(String[]args){LinkedListlink=newLinkedList();link.addFirst("abc1"); //將指定元素插入此集合的開頭link.addLast("haha"); //將指定元素添加到此集合的結(jié)尾System.out.println(link.peekFirst());//獲取但不移除此集合的第一個(gè)元素System.out.println(link.pollFirst());//獲取但不移除此集合的最后一個(gè)元素System.out.println(link);System.out.println(link.pollLast());//獲取并移除此集合的第一個(gè)元素System.out.println(link);System.out.println(link.peekLast());//獲取并移除此集合的最后一個(gè)元素))運(yùn)行結(jié)果如圖7-5所示。博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效圖7-5運(yùn)行結(jié)果三、案例總結(jié)1、LinkedList集合內(nèi)部維護(hù)了一個(gè)雙向循環(huán)鏈表,鏈表中的每一個(gè)元素都使用引用的方式來記住它的前一個(gè)元素和后一個(gè)元素,從而可以將所有的元素彼此連接起來。當(dāng)插入一個(gè)新元素時(shí),只需要修改元素之間的這種引用關(guān)系即可,刪除一個(gè)節(jié)點(diǎn)也是如此。正因?yàn)檫@樣的存儲(chǔ)結(jié)構(gòu),所以LinkedList集合對(duì)于元素的增刪操作具有很高的效率。2、在本案例中,所用的方法及其功能具體如下:1)peekFirst()方法用于獲取LinkedList集合中的第一個(gè)元素,如果此列表為空則返回NULL2)peekLast()方法用于獲取LinkedList集合中的最后一個(gè)元素,如果此列表為空則返回NULL3)pollFirst()方法用于獲取并移除LinkedList集合中的第一個(gè)元素,如果此列表為空則返回NULL4)pollLast()方法用于獲取并移除LinkedList集合中的最后一個(gè)元素,如果此列表為空則返回NULLaddFirst()方法用于添加LinkedList集合中的第一個(gè)元素addLast()方法用于添加LinkedList集合中的最后一個(gè)元素案例7-5Iterator遍歷集合元素一、案例描述1、考核知識(shí)點(diǎn)編號(hào):00107006名稱:Iterator接口2、練習(xí)目標(biāo)掌握Iterator迭代器的使用3、需求分析在程序開發(fā)中,經(jīng)常需要遍歷集合中的所有元素。針對(duì)這種需求,JDK專門提供了一個(gè)接口Iterator。為了使初學(xué)者熟悉Iterator迭代器的使用,本案例將演示如何使用Iterator迭代器遍歷集合中的元素。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理)1)編寫一個(gè)類Example05)在類中定義一個(gè)List集合,并向集合中添加數(shù)據(jù))通過調(diào)用List集合的iterator。方法獲得迭代器對(duì)象)在while循環(huán)條件中使用hashNext()方法判斷集合中是否存在下一個(gè)元素,如果存在,則調(diào)用next()方法將元素取出,否則說明已到達(dá)了集合末尾,停止遍歷元素

博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效二、案例實(shí)現(xiàn)定義Example05類,其代碼如下:importjava.util.*;publicclassExample05{publicstaticvoidmain(String[]args){Listlist=newArrayList();list.add("abc1"); //向集合中添加元素list.add("abc2");list.add("abc3");list.add("abc4");Iteratorit=list.iterator();//獲取迭代器對(duì)象while(it.hasNext()){ /判斷是否還有元素Objectobj=it.next();/取出元素System.out.println(obj);)))運(yùn)行結(jié)果如圖7-6所示。圖7-6圖7-6運(yùn)行結(jié)果三、案例總結(jié)1、需要注意的是,在通過next()方法獲取元素時(shí),必須保證要獲取的元素存在,否則,會(huì)拋出NoSuchElementException異常。.Iterator迭代器對(duì)象在遍歷集合時(shí),內(nèi)部采用指針的方式來跟蹤集合中的元素,圖7-7演示了Iterator對(duì)象迭代元素的過程。第一次迫卬not。方法的正0值第一個(gè)元素第二個(gè)元素最后一個(gè)元素is用T+第一個(gè)元素第二個(gè)元素最后一個(gè)元素is用T+方法才首eT1O

第一次調(diào)用E方法第二次調(diào)用父方法II方法返回式迭代器終止圖7-7遍歷元素過程圖博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效案例7-6foreach循環(huán):簡化遍歷一、案例描述1、考核知識(shí)點(diǎn)編號(hào):00107007名稱:foreach循環(huán)2、練習(xí)目標(biāo)掌握使用foreach循環(huán)遍歷集合和數(shù)組3、需求分析雖然Iterator可以用來遍歷集合中的元素,但寫法上比較繁瑣,為了簡化書寫,從JDK5.0開始,提供了foreach循環(huán)。foreach循環(huán)用于遍歷數(shù)組或集合中的元素。為了讓初學(xué)者能熟悉foreach循環(huán)的使用,本案例將演示如何用foreach循環(huán)遍歷數(shù)組和集合中的元素。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理)1)編寫一個(gè)類Example06,2)在該類中定義一個(gè)List集合,向集合中添加四個(gè)元素3)用foreach循環(huán)遍歷集合中的元素4)在類中定義一個(gè)數(shù)組arr,靜態(tài)初始化數(shù)組int[]arr={3,2,6};5)用foreach循環(huán)遍歷arr中的元素二、案例實(shí)現(xiàn)importjava.util.*;publicclassExample06{publicstaticvoidmain(String[]args){//創(chuàng)建list集合Listlist=newArrayList();list.add("sv");list.add("lv");list.add("mv");list.add("tv");System.out.println("遍歷集合中的元素:");for(Objectobj:list){ //foreach循環(huán)遍歷集合中的元素System.out.println(obj);)//定義數(shù)組int[]arr={3,2,6};System.out.println("遍歷數(shù)組中的元素:");for(intx:arr){ //foreach循環(huán)遍歷數(shù)組中的元素System.out.println(x);}}博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效運(yùn)行結(jié)果如圖7-8所示。圖7-8運(yùn)行結(jié)果三、案例總結(jié)1、通過案例可以看出,foreach循環(huán)在遍歷集合時(shí)語法非常簡潔,沒有循環(huán)條件,也沒有迭代語句,所有這些工作都交給虛擬機(jī)去執(zhí)行了。foreach循環(huán)的次數(shù)是由容器中元素的個(gè)數(shù)決定的,每次循環(huán)時(shí),foreach中都通過變量將當(dāng)前循環(huán)的元素記住,從而將集合中的元素分別打印出來。2、使用foreach循環(huán)遍歷集合和數(shù)組時(shí),只能訪問集合中的元素,不能對(duì)其中的元素進(jìn)行修改。案例7-7Listiterator迭代器的特有方法一、案例描述1、考核知識(shí)點(diǎn)編號(hào):00107008名稱:Listiterator接口2、練習(xí)目標(biāo)掌握Listiterator接口中特有方法的使用3、需求分析Listiterator迭代器是Iterator的子類,該類在父類的基礎(chǔ)上增加了一些特有方法。為了讓初學(xué)者能熟悉Listiterator接口中特有方法的使用,本案例將演示如何用Listiterator接口中的方法向集合中插入元素和逆向遍歷集合。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理)1)編寫一個(gè)類Example072)在該類中定義一個(gè)List集合,向集合中添加四個(gè)元素3)用Listiterator接口的add()方法向集合中插入一個(gè)元素并遍歷集合list4)用Listiterator接口的booleanhasPrevious()方法逆向遍歷集合二、案例實(shí)現(xiàn)importjava.util.*;publicclassExample07{publicstaticvoidmain(String[]args){10博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效Listlist=newArrayList();list.add("abc1");list.add("abc2");list.add("abc3");list.add("abc4");Listiteratorlit=list.listIterator();while(lit.hasNext()){Objecto=lit.next();//遍歷到abc4元素時(shí),向集合中添加一個(gè)元素if("abc4".equals(o)){lit.add("abc5");)System.out.println(o);)//逆向遍歷集合System.out.println("以下是逆向遍歷");while(lit.hasPrevious()){System.out.println(lit.previous());)))運(yùn)行結(jié)果如圖7-9所示。圖7-9運(yùn)行結(jié)果三、案例總結(jié)1、Listiterator迭代器的特有方法,如表7-3所示。表7-3Listiterator迭代器的特有方法方法聲明功能描述voidadd(Objecto)將指定的元素插入列表(可選操作)booleanhasPrevious()如果以逆向遍歷列表,列表迭代器有多個(gè)元素,則返回trueObjectprevious()返回列表中的前一個(gè)元素voidremove()從列表中移除由next或previous返回的最后一個(gè)元素(可選操作)2、在本案例中,使用hasPrevious()方法判斷是否存在上一個(gè)元素,如果存在,則通過previous。方法將元素取出,否則,則表示到達(dá)了集合的末尾,沒有要遍歷的元素。3、在遍歷過程中,如果想增加元素同樣不能調(diào)用集合對(duì)象的add()方法,此時(shí)需要使用Listiterator提11博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效供的add()方法,否則會(huì)出現(xiàn)并發(fā)修改異常ConcurrentModificationException。需要注意的是,Listiterator迭代器只能用于List集合。案例7-8用Enumeration迭代Vector集合一、案例描述1、考核知識(shí)點(diǎn)編號(hào):00107009名稱:Enumeration接口2、練習(xí)目標(biāo)掌握如何使用Enumeration迭代器的特有方法遍歷Vector集合中的元素3、需求分析在JDK1.2以前還沒有Iterator接口的時(shí)候,遍歷集合需要使用Enumeration迭代器接口。由于很多程序中依然在使用Enumeration,因此了解該接口的用法是很有必要的。Vevtor集合是List接口的一個(gè)實(shí)現(xiàn)類。為了讓初學(xué)者能熟悉 Enumeration迭代器的用法,本案例將演示如何用Enumeration迭代器遍歷Vector集合。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理)1)編寫一個(gè)類Example08,在該類中定義一個(gè)Vector集合v2)向集合v中添加四個(gè)元素3)用Enumeration迭代器遍歷集合v,輸出集合中的每一個(gè)元素二、案例實(shí)現(xiàn)importjava.util.*;publicclassExample08{publicstaticvoidmain(String[]args){Vectorv=newVector(); /創(chuàng)建Vector集合v.addElement("秦始皇");v.addElement("成吉思汗");v.addElement("朱元璋");v.addElement("李世民");Enumeratione=v.elements();while(e.hasMoreElements()){//Enumeration迭代器遍歷Vector集合Stringname=(String)e.nextElement();System.out.println(name);)))運(yùn)行結(jié)果如圖7-10所示。12博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效圖7-10運(yùn)行結(jié)果三、案例總結(jié)1、JDK中提供了一個(gè)Vevtor集合,該集合是List接口的一個(gè)實(shí)現(xiàn)類,用法與ArrayList完全相同,區(qū)別在于Vector集合是線程安全的,而ArrayList集合是線程不安全的。在Vector類中提供了一個(gè)elements()方法用于返回Enumeration對(duì)象,通過Enumeration對(duì)象就可以遍歷該集合中的元素。2、在本案例中,使用Enumeration迭代器時(shí),使用一個(gè)while循環(huán)對(duì)集合中的元素進(jìn)行迭代,其過程與Iterator迭代的過程類似,通過hasMoreElements()方法循環(huán)判斷是否存在下一個(gè)元素,如果存在,則通過nextElement()方法逐一取出每個(gè)元素。案例7-9HashSet集合的存儲(chǔ)一、案例描述1、考核知識(shí)點(diǎn)編號(hào):00107010名稱:HashSet集合2、練習(xí)目標(biāo)>了解HashSet集合的存儲(chǔ)特點(diǎn)>掌握HashSet集合的用法3、需求分析HashSet是Set接口的一個(gè)實(shí)現(xiàn)類,它所存儲(chǔ)的元素是不可重復(fù)的,并且元素都是無序的。為了讓初學(xué)者熟悉HashSet集合的用法,本案例將針對(duì)HashSet集合中元素不可重復(fù)的特點(diǎn),對(duì)HashSet集合的存儲(chǔ)和遍歷過程進(jìn)行演示。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理)1)編寫一個(gè)類Example09,在該類中定義一個(gè)HashSet集合hs2)向集合hs中添加6個(gè)元素,其中有一些重復(fù)的元素3)用size()方法獲取添加完元素后集合中元素的個(gè)數(shù)4)用Iterator迭代器遍歷集合的每一個(gè)元素5)觀察在輸出結(jié)果中,是否存在重復(fù)的元素二、案例實(shí)現(xiàn)importjava.util.*;publicclassExample09{publicstaticvoidmain(String[]args){13

博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效//創(chuàng)建HashSet集合HashSeths=newHashSet();//向HashSet集合中添加元素,其中包括重復(fù)元素hs.add("abc2");hs.add("abc2");hs.add("abc1");hs.add("abc4");hs.add("abc4");hs.add("abc3");//輸出集合中元素的個(gè)數(shù)System.out.println("添加后集合中元素個(gè)數(shù):"+hs.size());//輸出集合中每一個(gè)元素Iteratorit=hs.iterator();System.out.println("添加后集合中包含以下元素:”);while(it.hasNext()){System.out.println(it.next());)))運(yùn)行結(jié)果如圖7-11所示。篆堂里壽妻個(gè)數(shù)1吐.=!”佯kL,篆堂里壽妻個(gè)數(shù)1吐.=!”佯kL,■如Exwipl壯19圖7-11運(yùn)行結(jié)果三、案例總結(jié)1、HashSet是Set接口的一個(gè)實(shí)現(xiàn)類,它所存儲(chǔ)的元素是不可重復(fù)的,并且元素都是無序的。當(dāng)向HashSet集合中添加一個(gè)對(duì)象時(shí),首先會(huì)調(diào)用該對(duì)象的hashCode()方法來確定元素的存儲(chǔ)位置,然后再調(diào)用對(duì)象的equals()方法來確保該位置沒有重復(fù)元素。2、在本案例中,首先通過add()方法向HashSet集合依次添加了六個(gè)字符串,然后通過Iterator迭代器遍歷所有的元素并輸出打印。從打印結(jié)果可以看出取出元素的順序與添加元素的順序并不一致,并且重復(fù)存入的字符串對(duì)象"abc2"和"abc4"被去除了,只添加了一次。案例7-10將Object類存入HashSet一、案例描述1、考核知識(shí)點(diǎn)14博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效編號(hào):00107010名稱:HashSet集合2、練習(xí)目標(biāo)掌握如何將對(duì)象存入HashSet集合并且去除重復(fù)對(duì)象3、需求分析HashSet集合之所以能確保不出現(xiàn)重復(fù)的元素,是因?yàn)樗谔砑訉?duì)象時(shí),會(huì)先調(diào)用該對(duì)象的hashCode()方法來確定元素的存儲(chǔ)位置,再調(diào)用對(duì)象的equals()方法來確保該位置沒有重復(fù)元素。為了將Object類存入HashSet集合,本案例將針對(duì)如何重寫Object類中的hashCode()和equals()方法去除重復(fù)的Object對(duì)象進(jìn)行演示。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理)1)設(shè)計(jì)一個(gè)Person類,在該類中定義兩個(gè)變量name和age2)在Person類中重寫hashCode()和equals()方法3)編寫類Example10,在該類中定義一個(gè)HashSet集合4)將Person對(duì)象存入HashSet集合中,其中含有重復(fù)的Person對(duì)象5)遍歷HashSet集合中的元素,觀察結(jié)果是否含有重復(fù)的對(duì)象二、案例實(shí)現(xiàn)設(shè)計(jì)Person類,其代碼如下:classPerson{privateStringname;privateintage;publicPerson(Stringname,intage){=name;this.age=age;)//重寫hashCode方法,返回name屬性的哈希值publicinthashCode(){returnname.hashCode()+age*2;)//重寫equals方法publicbooleanequals(Objectobj){if(this==obj)returntrue;if(objinstanceofPerson){Personp=(Person)obj;return.equals()&&this.age==p.age;)returnfalse;)//重寫toString()方法publicStringtoString(){return"Person"+name+age;)15博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效publicclassExample10{publicstaticvoidmain(String[]args){//創(chuàng)建HashSet對(duì)象HashSeths=newHashSet();//將Person對(duì)象存入集合hs.add(newPerson("lisa”,21));hs.add(newPerson("lisi”,32));hs.add(newPerson("lisi”,32));hs.add(newPerson("leilei”,31));hs.add(newPerson("lusi”,25));hs.add(newPerson("lusi”,25));//遍歷集合中的元素Iteratorit=hs.iterator();while(it.hasNext()){Personp=(Person)it.next();System.out.println(p);)))運(yùn)行結(jié)果如圖7-12所示。圖7-12運(yùn)行結(jié)果三、案例總結(jié)在本案例中,當(dāng)HashSet集合的存入元素時(shí),首先調(diào)用當(dāng)前存入對(duì)象的hashCode()方法獲得name屬性的哈希值,然后根據(jù)對(duì)象的哈希值計(jì)算出一個(gè)存儲(chǔ)位置。如果該位置上沒有元素,則直接將元素存入,如果該位置上有元素存在,則會(huì)調(diào)用equals()方法讓當(dāng)前存入的元素依次和該位置上的元素進(jìn)行比較,如果返回的結(jié)果為false就將該元素存入集合,返回的結(jié)果為true則說明有重復(fù)元素,就將該元素舍棄。整個(gè)存儲(chǔ)的流程如圖7-13所示。16博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效圖7-13HashSet對(duì)象存儲(chǔ)過程案例7-11TreeSet集合的存儲(chǔ)一、案例描述1、考核知識(shí)點(diǎn)編號(hào):00107012名稱:TreeSet集合2、練習(xí)目標(biāo)>了解TreeSet集合的存儲(chǔ)特點(diǎn)>掌握TreeSet集合的存儲(chǔ)和迭代操作3、需求分析TreeSet是Set接口的另一個(gè)實(shí)現(xiàn)類,它內(nèi)部采用平衡二叉樹來存儲(chǔ)元素,這樣的結(jié)構(gòu)可以保證TreeSet集合中沒有重復(fù)的元素,并且可以對(duì)元素進(jìn)行排序。為了讓初學(xué)者能熟悉TreeSet集合的使用,本案例通過向TreeSet集合添加元素并遍歷集合元素來演示。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理)1)編寫一個(gè)類Examplell,定義一個(gè)TreeSet集合2)向TreeSet集合中添加一系列元素,其中有重復(fù)元素3)遍歷輸出TreeSet集合中所有的元素二、案例實(shí)現(xiàn)importjava.util.*;publicclassExamplell{publicstaticvoidmain(String[]args){17博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效TreeSetts=newTreeSet();//創(chuàng)建TreeSet集合ts.add("abc3"); //向集合中添加一系列元素,其中包括重復(fù)元素ts.add("abc2");ts.add("abc4");ts.add("aabbcc");ts.add("aabbcc");ts.add("abc1");Iteratorit=ts.iterator();while(it.hasNext()){ //使用Iterator迭代器遍歷TreeSet集合元素System.out.println(it.next());)))運(yùn)行結(jié)果如圖7-14所示。三宜電員:金等鬟系存:r457>j.BiuaE'xajinpli!:11舞hJbc心hcl加2Pm:3辰4圖7-14運(yùn)行結(jié)果三、案例總結(jié)TreeSet內(nèi)部采用平衡二叉樹來存儲(chǔ)元素,所謂二叉樹就是說每個(gè)節(jié)點(diǎn)最多有兩個(gè)子節(jié)點(diǎn)的有序樹,每個(gè)節(jié)點(diǎn)及其子節(jié)點(diǎn)組成的樹稱為子樹,通常左側(cè)的子節(jié)點(diǎn)稱為“左子樹”右側(cè)的節(jié)點(diǎn)稱為“右子樹”,其中左子樹上的元素應(yīng)小于它的根結(jié)點(diǎn),而右子樹上的元素應(yīng)大于它的根結(jié)點(diǎn)。二叉樹中元素的存儲(chǔ)結(jié)構(gòu)如圖7-15所示。圖7-15二叉樹的存儲(chǔ)結(jié)構(gòu)案例7-12自定義比較器一、案例描述1、考核知識(shí)點(diǎn)編號(hào):0010701318博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效名稱:Comparator比較器2、練習(xí)目標(biāo)掌握如何通過自定義比較器的方式對(duì)TreeSet集合中的元素排序3、需求分析如果定義的類沒有實(shí)現(xiàn)Comparable接口或者對(duì)于實(shí)現(xiàn)了Comparable接口的類而不想按照定義的compareTo(歷法進(jìn)行排序,這時(shí),可以通過自定義比較器的方式對(duì)TreeSet集合中的元素排序。為了讓初學(xué)者能掌握自定義比較器的編寫,本案例將通過自定義比較器對(duì)TreeSet集合中的元素排序。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理)1)設(shè)計(jì)類Person,該類中有變量name和age,并實(shí)現(xiàn)它們的get()和set()方法。2)設(shè)計(jì)類MyComparator自定義比較器,該類實(shí)現(xiàn)了Comparator接口3)在類MyComparator中實(shí)現(xiàn)比較方法,以Person對(duì)象中age為主要比較條件,如果age相等再比較name4)編寫類Example12,創(chuàng)建TreeSet集合,在創(chuàng)建TreeSet集合時(shí)傳入自定義比較器MyComparator。并將Person對(duì)象存入集合中5)遍歷集合中的元素,觀察執(zhí)行結(jié)果二、案例實(shí)現(xiàn)改寫Person類,具體代碼如下:classPerson{privateStringname;privateintage;publicPerson(Stringname,intage){=name;this.age=age;publicStringtoString(){}return“Perso…ame…publicStringgetName(){,publicvoidsetName(Stringname){「一=name;publicintgetAge(){}return毋publicvoidsetAge(intage){this.age=age;自定義比較器,具體代碼如下:19博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效classMyComparatorimplementsComparator{publicintcompare(Objecto1,Objecto2){//類型轉(zhuǎn)換,比較的是Person對(duì)象Personp1=(Person)o1;Personp2=(Person)o2;//以年齡為主要條件intnum=p1.getAge()-p2.getAge();returnnum==0?p1.getName().compareTo(p2.getName()):num;))編寫Example12類,具體代碼如下:importjava.util.TreeSet;importjava.util.Iterator;importjava.util.Comparator;publicclassExample12{publicstaticvoidmain(String[]args){TreeSetts=newTreeSet(newMyComparator());ts.add(newPerson("lisa”,22));ts.add(newPerson("lisi”,24));ts.add(newPerson("lisi”,21));ts.add(newPerson("wangwu”,20));ts.add(newPerson("zhaoliu”,19));ts.add(newPerson("zhaoliu”,26));Iteratorit=ts.iterator();while(it.hasNext()){System.out.println(it.next());)))運(yùn)行結(jié)果如圖7-16所示。圖7-16運(yùn)行結(jié)果三、案例總結(jié)在本案例中,定義了一個(gè)MyComparator類實(shí)現(xiàn)了Comparator接口,在compare。方法中實(shí)現(xiàn)元素的比較,這就相當(dāng)于定義了一個(gè)比較器。在創(chuàng)建TreeSet集合時(shí),將MyComparator比較器對(duì)象傳入,當(dāng)向集合中添加元素時(shí),比較器對(duì)象的compare。方法就會(huì)被自動(dòng)調(diào)用,從而使存入TreeSet集合中的字符串按照長度進(jìn)行排序。20博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效案例7-13操作HashMap集合的方法一、案例描述1、考核知識(shí)點(diǎn)編號(hào):00107014名稱:HashMap集合2、練習(xí)目標(biāo)了解HashMap集合的存儲(chǔ)特點(diǎn)掌握如何使用操作HashMap集合的方法3、需求分析Map接口用于存儲(chǔ)具有對(duì)應(yīng)關(guān)系的數(shù)據(jù)。它的每個(gè)元素都包含一個(gè)鍵對(duì)象Key和值對(duì)象Value,鍵和值對(duì)象之間存在映射。HashMap集合是Map接口的一個(gè)實(shí)現(xiàn)類。為了讓初學(xué)者能熟悉使用HashMap集合,本章將采用使用不同方法對(duì)HashMap集合進(jìn)行操作,學(xué)習(xí)HashMap集合的使用方法。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理)1)編寫類Example13,創(chuàng)建一個(gè)HashMap集合,并向集合中添加元素2)使用一系列方法分別對(duì)定義的集合進(jìn)行增加、移除、判斷等操作3)運(yùn)行程序,根據(jù)輸出結(jié)果,分析這些方法對(duì)HashMap集合的操作二、案例實(shí)現(xiàn)編寫Example13類,具體代碼如下:importjava.util.*;publicclassExample13{publicstaticvoidmain(String[]args){//創(chuàng)建集合對(duì)象Mapmap=newHashMap();//添加元素map.put("czbk001","林青霞");map.put("czbk003","林志玲");map.put("czbk002","林志穎");//添加元素,如果鍵存在,就替換,返回以前與key關(guān)聯(lián)的值。System.out.println(map.put("czbk003","林志炫"));//Vremove(Objectkey):根據(jù)指定的鍵刪除鍵值對(duì)。System.out.println("remove:"+map.remove("czbk003"));//判斷指定的鍵是否在集合中存在System.out.println("containsKey:"+map.containsKey("czbk002"));System.out.println("containsKey:"+map.containsKey("czbk007"));//判斷指定的值是否在集合中存在System.out.println("containsValue:"+map.containsValue("林志穎"));//判斷集合是否為空21博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效System.out.println("isEmpty:"+map.isEmpty());//集合中元素的個(gè)數(shù)System.out.println("size:"+map.size());//輸出集合對(duì)象名稱System.out.println("map:"+map);))運(yùn)行結(jié)果如圖7-17所示。工管理!立命令存小存葉千:一=林志施心nim*同Wit口N?y:truecz第mtwHn也加?y=f?i1edci>ritalni£UjLlLii.e二電bIecxSn.^p:<nnhkPlRI士富,clHl(RflS-土尸七呈=>D:MajmplEPaiiGkagEMilhiaFtEfQ1?).圖7-17運(yùn)行結(jié)果三、案例總結(jié)在本案例中,從運(yùn)行結(jié)果可以看出:1)集合中鍵為czbk003對(duì)應(yīng)的值是“林志玲”。2)由于集合中存在鍵czbk003,所以程序做map.put(”czbk003","林志炫”)操作時(shí),值會(huì)替換為'林志炫"。所以刪除鍵為czbk003的對(duì)象時(shí),程序輸出remove:"林志炫”。由此證實(shí)了Map中的鍵必須是唯一的,不能重復(fù)。如果存儲(chǔ)了相同的鍵,后存儲(chǔ)的值則會(huì)覆蓋原有的值,簡而言之就是,鍵相同,值覆蓋。3)"czbk002”在集合中存在,所以輸出true。"czbk007”在集合中不存在,輸出false.4)值”林志穎”在集合中存在,所以輸出true。5)因?yàn)榧喜粸榭?,所以map.isEmpty()返回false。案例7-14遍歷Map中所有的鍵值一、案例描述1、考核知識(shí)點(diǎn)編號(hào):00107014名稱:HashMap集合2、練習(xí)目標(biāo)掌握遍歷Map中所有的鍵值兩種方法3、需求分析在程序開發(fā)中,經(jīng)常需要取出Map中所有的鍵和值。為了讓大家熟悉遍歷Map中所有的鍵值,本案例將演示遍歷Map中所有的鍵值對(duì)的兩種遍歷方式。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理)1)編寫類Example14,在該類中創(chuàng)建Map集合并向集合中添加元素22博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效2)使用第一種方式,遍歷集合元素,先獲取鍵的集合,再獲取鍵所對(duì)應(yīng)的值3)使用第二種方式,先獲取集合中鍵值對(duì)映射關(guān)系,再從映射關(guān)系中獲得鍵和值二、案例實(shí)現(xiàn)importjava.util.*;publicclassExample14{publicstaticvoidmain(String[]args){//創(chuàng)建集合對(duì)象Mapmap=newHashMap();//添加元素map.put("001","李世民");map.put("002","朱元璋");map.put("003","武則天");System.out.println("方式一遍歷:”);//遍歷1:先獲取鍵的集合,再獲取鍵所對(duì)應(yīng)的值Setkeyset=map.keySet();for(Objectkey:keyset){Objectvalue=map.get(key);System.out.println(key+"***"+value);)System.out.println("方式二遍歷:");//遍歷2:先獲取集合中鍵值對(duì)映射關(guān)系,再從關(guān)系中獲得鍵和值Set<Map.Entry>mapSet=map.entrySet();for(Map.Entryme:mapSet){Objectkey=me.getKey();Objectvalue=me.getValue();System.out.println(key+"***"+value);)))運(yùn)行結(jié)果如圖7-18所示。圖7-18運(yùn)行結(jié)果23博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效三、案例總結(jié)1、在本案例中,第一種遍歷Map的方式是首先調(diào)用Map對(duì)象的KeySet()方法,獲得存儲(chǔ)Map中所有鍵的Set集合,然后通過foreach循環(huán)遍歷集合中的所有的鍵,最后通過調(diào)用get(key)方法,根據(jù)鍵獲取對(duì)應(yīng)的值。2、本案例中的第二種遍歷Map的方式,首先調(diào)用Map對(duì)象的entrySet()方法獲得存儲(chǔ)Map中所有映射的Set集合,這個(gè)集合中存放了Map.Entry類型的元素(Entry是Map接口內(nèi)部類),每個(gè)Map.Entry對(duì)象代表Map中的一個(gè)鍵值對(duì),然后迭代Set集合,獲得每一個(gè)映射對(duì)象,并分別調(diào)用映射對(duì)象的getKey()和getValue()方法獲取鍵和值。3、在Map中,還提供了一個(gè)values()方法,通過這個(gè)方法可以直接獲取Map中存儲(chǔ)所有值的Collection集合。獲取代碼如下:Collectionvalues=map.values();for(Objectvalue:values){System.out.println(value);)將此代碼替換案例中的兩種遍歷方法的代碼,運(yùn)行結(jié)果如圖7-19所示。圖7-19運(yùn)行結(jié)果案例7-15TreeMap集合的存取一、案例描述1、考核知識(shí)點(diǎn)編號(hào):00107015名稱:TreeMap集合2、練習(xí)目標(biāo)了解TreeMap集合的存儲(chǔ)特點(diǎn)掌握TreeMap集合存儲(chǔ)和迭代方法3、需求分析TreeMap集合用來存儲(chǔ)鍵值映射關(guān)系,其中不允許出現(xiàn)重復(fù)的鍵。在TreeMap中是通過二叉樹的原理來保證鍵的唯一性,因此 TreeMap中所有的鍵是按照某種順序排列的。為了熟悉TreeMap集合的使用,本案例將使用TreeMap集合獲取一個(gè)字符串中每一個(gè)字母出現(xiàn)的次數(shù),在實(shí)現(xiàn)這一功能的過程中掌握TreeMap集合存儲(chǔ)和迭代方法。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理)1)編寫一個(gè)類Example15,要獲取字符串"cbxzbvavdvgd"中,每一個(gè)字母出現(xiàn)次數(shù),先將字符串轉(zhuǎn)化成數(shù)組2)定義一個(gè)TreeMap集合,字符出現(xiàn)的次數(shù)作為鍵,每一個(gè)字符作為值24

博學(xué)谷讓博學(xué)谷讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效3)遍歷字符數(shù)組,獲取到每一個(gè)字符4)拿到每一個(gè)字符,到TreeMap集合中找對(duì)應(yīng)的值,判斷返回值是否為NULL5)如果返回值是NULL,就將字符存儲(chǔ)到TreeMap集合中,對(duì)應(yīng)的鍵記為16)如果返回值不為NULL,就將鍵值加1,并重新將值(字符)和鍵(出現(xiàn)的次數(shù))存入集合7)把TreeMap的元素拼接成一個(gè)字符串,輸出結(jié)果二、案例實(shí)現(xiàn)importjava.util.*;publicclassExample15{publicstaticvoidmain(String[]args){Strings="cbxzbvavdvgd";/把字符串變成字符數(shù)組。char[]chs=s.toCharArray();//定義一個(gè)TreeMap集合TreeMap<Character,Integer>tm=newTreeMap<Character,Integer>();//遍歷字符數(shù)組,獲取到每一個(gè)字符。for(charch:chs){/拿到該字符,到TreeMap集合中找對(duì)應(yīng)的值Integeri=tm.get(ch);//根據(jù)返回值是否為null。是:存儲(chǔ),把次數(shù)記錄為1;否:把數(shù)據(jù)++,然后重寫存儲(chǔ)if(i==null){tm.put(ch,1);}else{i++;tm.put(ch,i);}}//把TreeMap的數(shù)據(jù)拼接成一個(gè)字符串。StringBuildersb=newStringBuilder();Set<Character>set=tm.keySet();for(Characterch:set){Integeri=tm.get(ch);sb.append(ch).append("(").append(i).append(")");}Stringresult=sb.toString();System.out.println(result);}}運(yùn)行結(jié)果如圖7-20所示。圖7-20運(yùn)行結(jié)果圖7-20運(yùn)行結(jié)果25博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效三、案例總結(jié)1、在本案例中,演示了TreeMap集合中元素的存儲(chǔ)和迭代方法與HashMap相同。從輸出結(jié)果可以看出,TreeMap集合中的元素是不重復(fù)的,并且按照值的自然順序進(jìn)行了排序。這是因?yàn)樵赥reeMap中是通過二叉樹的原理來保證鍵的唯一性,這個(gè)TreeSet集合存儲(chǔ)的原理一樣,因此TreeMap中所有的鍵是按照某種順序排列的。2、本案例中,在定義TreeMap集合時(shí)使用了泛型,即〈參數(shù)化類型>。它可以指定該類中方法操作的數(shù)據(jù)類型,避免在集合存取時(shí)會(huì)產(chǎn)生的數(shù)據(jù)類型轉(zhuǎn)化的錯(cuò)誤。案例7-16 Proeprties集合的功能一、案例描述1、考核知識(shí)點(diǎn)編號(hào):00107016名稱:Proeprties集合2、練習(xí)目標(biāo)掌握Proeprties集合的存儲(chǔ)和遍歷方法3、需求分析Map接口中還有一個(gè)實(shí)現(xiàn)類Hashtable,它和HashMap的區(qū)別是Hashtable是線程安全的。Hashtable類有一個(gè)子類Properties在實(shí)際應(yīng)用中非常重要,Properties主要用來存儲(chǔ)字符串類型的鍵和值,為了掌握Properties集合的使用,本案例將演示Properties集合中元素的存儲(chǔ),修改和遍歷。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理)1)編寫一個(gè)類Example16,創(chuàng)建Proeprties集合對(duì)象2)向Proeprties集合中添加元素3)遍歷Proeprties集合中的元素二、案例實(shí)現(xiàn)importjava.util.*;publicclassExample16{publicstaticvoidmain(String[]args){//創(chuàng)建集合對(duì)象Propertiesprop=newProperties();添加元素prop.setProperty("劉備","雙股劍");prop.setProperty(關(guān)羽","青龍偃月刀");prop.setProperty(張飛","丈八蛇矛");Set<String>set=prop.stringPropertyNames();for(Stringkey:set){26博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效Stringvalue=prop.getProperty(key);System.out.println(key+" "+value);)))運(yùn)行結(jié)果如圖7-21所示。圖7-21運(yùn)行結(jié)果三、案例總結(jié)Properties類中,針對(duì)字符串的存取提供了兩個(gè)專用的方法setProperty()和getProperty()。setProperty()方法用于將配置項(xiàng)的鍵和值添加到Properties集合當(dāng)中。propertyNames()方法得到一個(gè)包含所有鍵的set對(duì)象,然后在遍歷所有的鍵時(shí),通過調(diào)用getProperty()方法獲得鍵所對(duì)應(yīng)的值。案例7-17泛型的使用一、案例描述1、考核知識(shí)點(diǎn)編號(hào):00107017名稱:泛型的使用2、練習(xí)目標(biāo)>了解為什么要使用泛型>掌握泛型的使用方法3、需求分析集合可以存儲(chǔ)任何類型的對(duì)象,但是在程序中無法確定一個(gè)集合中的元素到底是什么類型的。那么在取出元素時(shí),如果進(jìn)行強(qiáng)制類型轉(zhuǎn)換就很容易出錯(cuò)。為了解決這個(gè)問題,在Java中引入了“參數(shù)化類型(parameterizedtype)”這個(gè)概念,即泛型。本案例將使用泛型來限定集合元素的數(shù)據(jù)類型,從而方便初學(xué)者學(xué)習(xí)泛型的使用方法。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理)1)編寫一個(gè)類Example17,創(chuàng)建ArrayList集合對(duì)象,并指定集合只能存儲(chǔ)String類型的元素2)向集合中添加元素,其中有一個(gè)Integer類型的元素3)遍歷集合中的元素,觀察結(jié)果是否報(bào)錯(cuò)二、案例實(shí)現(xiàn)importjava.util.*;publicclassExample17{27博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效publicstaticvoidmain(String[]args){//用ArrayList存儲(chǔ)字符串并遍歷ArrayList<String>array=newArrayList<String>();array.add("hello");array.add("world");array.add("java");array.add(newInteger(10));//添加一個(gè)Integer類型的數(shù)據(jù),此處報(bào)編譯異常Iterator<String>it=array.iterator();while(it.hasNext()){Strings=(String)it.next();System.out.println(s);)))編譯程序發(fā)現(xiàn)報(bào)錯(cuò),如圖7-22所示。圖7-22編譯報(bào)錯(cuò)錯(cuò)誤顯示array中不能再存入除String類型之外的數(shù)據(jù)類型,將Integer類型數(shù)據(jù)刪掉,重新編譯運(yùn)行程序,結(jié)果如圖7-23所示。圖7-23運(yùn)行結(jié)果三、案例總結(jié)1、在定義集合類時(shí),可以使用“〈參數(shù)化類型>”的方式指定該類中方法操作的數(shù)據(jù)類型,具體格式如下:ArrayList<參數(shù)化類型>list=newArrayList<參數(shù)化類型>();2、在本案例中,使用泛型規(guī)定了ArrayList集合只能存入String類型元素。需要注意的是,在使用泛型后每次遍歷集合元素時(shí),可以指定元素類型為String,而不是Object,這樣就避免了在程序中進(jìn)行強(qiáng)制類型轉(zhuǎn)換。3、在程序中也可以自定義泛型,自定義泛型的具體代碼如下:28博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效classcachePool<T>{ /在創(chuàng)建類時(shí),聲明參數(shù)類型為TTtemp;publicvoidsave(Ttemp){//在創(chuàng)建save()方法時(shí),指定參數(shù)類型為Tthis.temp=temp;)publicTget(){ 在創(chuàng)建get()方法時(shí),指定返回值類型為Treturntemp;))在定義CachePool類時(shí),聲明了參數(shù)類型為T,例如:在實(shí)例化對(duì)象時(shí)通過<Integer>將參數(shù)T指定為Integer類型,同時(shí)在調(diào)用save()方法時(shí)傳入的數(shù)據(jù)也是Integer類型,那么調(diào)用get()方法取出的數(shù)據(jù)自然就是Integer類型,這樣做的好處是不需要進(jìn)行類型轉(zhuǎn)換。案例7-18Collections類對(duì)集合的操作一、案例描述1、考核知識(shí)點(diǎn)編號(hào):00107019名稱:Collections工具類2、練習(xí)目標(biāo)掌握如何使用Collections類對(duì)集合進(jìn)行操作3、需求分析在程序中,針對(duì)集合的操作非常頻繁,針對(duì)這些常見操作,JDK提供了一個(gè)工具類專門用來操作集合,這個(gè)類就是^^^.。為了初學(xué)者能夠熟悉Collections類中的方法,本案例將使用Collections類中的各種方法操作集合實(shí)現(xiàn)模擬斗地主發(fā)牌,來學(xué)習(xí)Collections類對(duì)集合操作的方法。4、設(shè)計(jì)思路(實(shí)現(xiàn)原理)1)編寫類Example18,創(chuàng)建兩個(gè)String類型數(shù)組,其中一個(gè)用于存儲(chǔ)牌的花色,一個(gè)用于存儲(chǔ)牌的數(shù)字2)創(chuàng)建一個(gè)ArrayList集合作為牌盒,將大小王和不同花色不同數(shù)字的牌循環(huán)添加到集合中3)用Collections工具類的shuffle()方法洗牌4)創(chuàng)建三個(gè)ArrayList集合作為三個(gè)人的牌的集合,并循環(huán)發(fā)牌,要留三張底牌5)打印出三個(gè)人的牌和集合中留的三張底牌二、案例實(shí)現(xiàn)importjava.util.*;publicclassExample18{publicstaticvoidmain(String[]args){//表示花色的數(shù)組String[]colors={"黑桃","紅桃","梅花","方塊"};29博學(xué)谷一一讓IT教學(xué)更簡單,讓IT學(xué)習(xí)更有效//表示點(diǎn)數(shù)的數(shù)組String口numbers={"A","2","3","4","5","6","7","8","9","10","J","Q","K");//找一個(gè)牌盒ArrayList<String>arr

溫馨提示

  • 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)論