




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
學(xué)習(xí)目標(biāo)/Target熟悉Collection接口,能夠說出Collection接口中的常用方法掌握List接口的使用,能夠使用List接口中的ArrayList、LinkedList、Iterator接口和foreach循環(huán)了解集合的概念,能夠說出集合用于做什么掌握Set接口的使用,能夠使用Set接口中的HashSet、LinkedHashSet和TreeSet學(xué)習(xí)目標(biāo)/Target熟悉Lambda表達(dá)式,能夠使用Lambda表達(dá)式替代匿名內(nèi)部類掌握常用工具類的使用,能夠使用Collections工具類和Arrays工具類掌握Map接口的使用,能夠使用Map接口中的HashMap、LinkedHashMap、TreeMap和Properties章節(jié)概述/
Summary在前面的章節(jié)中我們學(xué)習(xí)了數(shù)組,數(shù)組可以存儲(chǔ)多個(gè)對(duì)象,但是數(shù)組只能存儲(chǔ)相同類型的對(duì)象,如果要存儲(chǔ)一批不同類型的對(duì)象,數(shù)組便無法滿足需求了。為此,Java提供了集合,集合可以存儲(chǔ)不同類型的多個(gè)對(duì)象。本章將針對(duì)Java中的集合類進(jìn)行詳細(xì)地講解。目錄/Contents010203集合概述Collection接口List接口04集合遍歷目錄/Contents050607Set接口Map接口常用工具類08Lambda表達(dá)式集合概述7.17.1集合概述
先定一個(gè)小目標(biāo)!了解集合概述,能夠說出集合的作用7.1集合概述為了存儲(chǔ)不同類型的多個(gè)對(duì)象,Java提供了一系列特殊的類,這些類可以存儲(chǔ)任意類型的對(duì)象,并且存儲(chǔ)的長度可變,被統(tǒng)稱為集合。集合可以簡單理解為一個(gè)長度可變,可以存儲(chǔ)不同數(shù)據(jù)類型的動(dòng)態(tài)數(shù)組。集合都位于java.util包中,使用集合時(shí)必須導(dǎo)入java.util包。什么是集合7.1集合概述集合體系核心架構(gòu)集合體系核心架構(gòu)圖如下所示。上圖列出了Java開發(fā)中常用的一些集合類,其中,虛線框里都是接口類型,實(shí)線框里是具體的實(shí)現(xiàn)類。7.1集合概述集合中的核心接口集合中的核心接口如下表所示。接口描述Collection集合中最基本的接口,用于存儲(chǔ)一組無序、不唯一的對(duì)象,一般不直接使用該接口ListCollection的子接口,用于存儲(chǔ)一組無序、不唯一的對(duì)象,是集合中常用的接口之一SetCollection的子接口,用于存儲(chǔ)一組無序、唯一的對(duì)象Map用于存儲(chǔ)一組鍵值對(duì)象,提供鍵到值的映射Collection接口7.27.2Collection接口
先定一個(gè)小目標(biāo)!熟悉Collection接口,能夠知道Collection接口中的常用方法7.2Collection接口Collection接口的定義Collection接口是Java單列集合中的根接口,它定義了各種具體單列集合的共性,其他單列集合大多直接或間接繼承該接口,Collection接口的定義如下所示:publicinterfaceCollection<E>extendsIterable<E>{//QueryOperations}由上述Collection接口的定義可以看到,Collection是Iterable的子接口,Collection和Iterable后面的<E>表示它們都使用了泛型。Collection接口的常用方法Collection接口的常用方法如下表所示。方法聲明功能描述booleanadd(Objecto)向集合中添加一個(gè)元素booleanaddAll(Collectionc)將指定集合c中的所有元素添加到本集合中voidclear()刪除集合中的所有元素booleanremove(Objecto)刪除集合中指定的元素booleanremoveAll(Collectionc)刪除當(dāng)前集合中包含集合c中的所有元素7.2Collection接口Collection接口的常用方法方法聲明功能描述booleanisEmpty()判斷集合是否為空booleancontains(Objecto)判斷集合中是否包含某個(gè)元素booleancontainsAll(Collectionc)判斷集合中是否包含指定集合c中的所有元素Iteratoriterator()返回集合的的迭代器(Iterator),迭代器用于遍歷該集合所有元素intsize()獲取集合元素個(gè)數(shù)7.2Collection接口List接口7.37.3.1List接口簡介
先定一個(gè)小目標(biāo)!了解List接口簡介,能夠說出List接口的常用方法7.3.1List接口簡介List接口繼承自Collection接口,List接口實(shí)例中允許存儲(chǔ)重復(fù)的元素,所有的元素以線性方式進(jìn)行存儲(chǔ)。在程序中可以通過索引訪問List接口實(shí)例中存儲(chǔ)的元素。另外,List接口實(shí)例中存儲(chǔ)的元素是有序的,即元素的存入順序和取出順序一致。List接口簡介List接口常用方法List作為Collection集合的子接口,不但繼承了Collection接口中的全部方法,而且還增加了一些根據(jù)元素索引操作集合的特有方法。List接口的常用方法如下表所示。7.3.1List接口簡介方法聲明功能描述voidadd(intindex,Objectelement)將元素element插入List的index索引處booleanaddAll(intindex,Collectionc)將集合c所包含的所有元素插入到List集合的index索引處Objectget(intindex)返回集合index索引處的元素Objectremove(int
index)刪除index索引處的元素List接口常用方法7.3.1List接口簡介方法聲明功能描述Objectset(int
index,Object
element)將index索引處元素替換成element對(duì)象,并將替換后的元素返回intindexOf(Object
o)返回對(duì)象o在List中第一次出現(xiàn)的位置索引intlastIndexOf(Object
o)返回對(duì)象o在List中最后一次出現(xiàn)的位置索引ListsubList(int
fromIndex,int
toIndex)返回從索引fromIndex(包括)到toIndex(不包括)處所有元素集合組成的子集合上述列舉了List接口的常用方法,List接口的所有實(shí)現(xiàn)類都可以通過調(diào)用這些方法操作集合元素。7.3.2ArrayList
先定一個(gè)小目標(biāo)!掌握ArrayList,能夠使用ArrayList的方法實(shí)現(xiàn)元素的存入和取出7.3.2ArrayListArrayList是List接口的一個(gè)實(shí)現(xiàn)類,它是程序中最常見的一種集合。ArrayList集合內(nèi)部封裝了一個(gè)長度可變的數(shù)組對(duì)象,當(dāng)存入的元素超過數(shù)組長度時(shí),ArrayList會(huì)在內(nèi)存中分配一個(gè)更大的數(shù)組來存儲(chǔ)這些元素,因此可以將ArrayList集合看作一個(gè)長度可變的數(shù)組。7.3.2ArrayListArrayList集合的元素插入過程7.3.2ArrayList案例演示下面通過一個(gè)案例學(xué)習(xí)ArrayList集合的元素存取。具體代碼如下所示。publicclassExample01{publicstaticvoidmain(String[]args){ArrayListlist=newArrayList();//創(chuàng)建ArrayList集合list.add("張三");//向集合中添加元素list.add("李四");list.add("王五");list.add("趙六");System.out.println("集合的長度:"+list.size());//獲取集合中元素的個(gè)數(shù)System.out.println("第2個(gè)元素是:"+list.get(1));//取出并打印指定位置的元素list.remove(3); //刪除索引為3的元素System.out.println("刪除索引為3的元素:"+list);list.set(1,"李四2");//替換索引為1的元素為李四2System.out.println("替換索引為1的元素為李四2:"+list);}}7.3.2ArrayList案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。7.3.2ArrayList案例運(yùn)行結(jié)果分析從上圖的運(yùn)行結(jié)果可以看出,索引位置為1的元素是集合中的第2個(gè)元素,這就說明集合和數(shù)組一樣,索引的取值范圍是從0開始的,最后一個(gè)索引是size-1,在訪問元素時(shí)一定要注意索引不可超出此范圍,否則程序會(huì)拋出索引越界異常IndexOutOfBoundsException。由于ArrayList集合的底層是使用一個(gè)數(shù)組來存儲(chǔ)元素,在增加或刪除指定位置的元素時(shí),會(huì)創(chuàng)建新的數(shù)組,效率比較低,因此Arraylist集合不適合做大量的增刪操作,而適合元素的查找。7.3.3LinkedList
先定一個(gè)小目標(biāo)!掌握LinkedList,能夠使用LinkedList的常用方法進(jìn)行添加、刪除和獲取元素的操作7.3.3LinkedList為了克服ArrayList集合在查詢元素時(shí)速度很快,但在增刪元素時(shí)效率較低的局限性,可以使用List接口的另一個(gè)實(shí)現(xiàn)類LinkedList。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集合增刪效率非常高。7.3.3LinkedListLinkedList集合添加、刪除元素過程7.3.3LinkedListLinkedList集合特有的方法針對(duì)元素的增加、刪除和獲取操作,LinkedList集合定義了一些特有的方法,如下表所示。方法聲明功能描述voidadd(intindex,Eelement)在集合的index索引處插入element元素voidaddFirst(Object
o)將指定元素o插入此集合的開頭voidaddLast(Object
o)將指定元素o添加到此集合的結(jié)尾Object
getFirst()返回此集合的第一個(gè)元素Object
getLast()返回此集合的最后一個(gè)元素Object
removeFirst()移除并返回集合的第一個(gè)元素Object
removeLast()移除并返回集合的最后一個(gè)元素booleanoffer(Objecto)將指定元素o添加到集合的結(jié)尾7.3.3LinkedListLinkedList集合特有的方法方法聲明功能描述booleanofferFirst(Object
o)將指定元素o添加到集合的開頭booleanofferLast(Object
o)將指定元素o添加到集合的結(jié)尾ObjectpeekFirst()獲取集合的第一個(gè)元素ObjectpeekLast()獲取集合的最后一個(gè)元素ObjectpollFirst()移除并返回集合的第一個(gè)元素ObjectpollLast()移除并返回集合的最后一個(gè)元素voidpush(Object
o)將指定元素o添加到集合的開頭7.3.3LinkedList案例演示上述列出的方法主要是針對(duì)集合中的元素進(jìn)行增加、刪除和獲取操作。下面通過一個(gè)案例學(xué)習(xí)這些方法的使用。具體代碼如下所示。publicstaticvoidmain(String[]args){LinkedListlink=newLinkedList();//創(chuàng)建LinkedList集合link.add("張三");link.add("李四");link.add("王五");link.add("趙六");System.out.println(link.toString());//獲取并打印該集合中的元素link.add(3,"Student");//向link集合中索引3處插入元素Studentlink.addFirst("First");//向link集合第一個(gè)位置插入元素FirstSystem.out.println(link);System.out.println(link.getFirst());//取出link集合中第一個(gè)元素link.remove(3);//移除link集合中指定索引位置為3的元素link.removeFirst();//移除link集合中第一個(gè)元素System.out.println(link);}7.3.3LinkedList案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。集合遍歷7.47.4.1Iterator接口
先定一個(gè)小目標(biāo)!掌握Iterator接口,能夠使用Iterator對(duì)集合進(jìn)行遍歷Iterator接口是Java集合框架中的一員,但它與Collection、Map接口有所不同,Collection接口與Map接口主要用于存儲(chǔ)元素,而Iterator主要用于迭代訪問(遍歷)Collection中的元素,通常情況下Iterator對(duì)象也被稱為迭代器。7.4.1Iterator接口
案例演示下面通過一個(gè)案例學(xué)習(xí)如何使用Iterator迭代集合中的元素。具體代碼如下所示。publicclassExample03{publicstaticvoidmain(String[]args){ArrayListlist=newArrayList();//創(chuàng)建ArrayList集合list.add("張三");//向該集合中添加字符串list.add("李四");list.add("王五");list.add("趙六");
Iteratorit=list.iterator();//獲取Iterator對(duì)象
while(it.hasNext()){//判斷ArrayList集合中是否存在下一個(gè)元素
Objectobj=it.next();//取出ArrayList集合中的元素System.out.println(obj);}}}7.4.1Iterator接口
案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。7.4.1Iterator接口
迭代器迭代元素過程迭代器對(duì)象在遍歷集合時(shí),內(nèi)部采用指針的方式來跟蹤集合中的元素。迭代器迭代元素過程如下圖所示。注意:通過迭代器獲取ArrayList集合中的元素時(shí),這些元素的類型都是Object類型,如果想獲取到特定類型的元素,則需要進(jìn)行對(duì)數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換。7.4.1Iterator接口
腳下留心并發(fā)修改異常在使用Iterator迭代器對(duì)集合中的元素進(jìn)行迭代時(shí),如果調(diào)用了集合對(duì)象的remove()方法刪除元素,之后繼續(xù)使用迭代器遍歷元素,會(huì)出現(xiàn)異常。腳下留心并發(fā)修改異常案例演示假設(shè)在集合中存儲(chǔ)了學(xué)校所有學(xué)生的姓名,一個(gè)名為張三的學(xué)生中途轉(zhuǎn)學(xué),就需要在迭代集合時(shí)找出該元素并將其刪除。具體代碼如下所示。ArrayListlist=newArrayList();//創(chuàng)建ArrayList集合list.add("張三");list.add("李四");list.add("王五");Iteratorit=list.iterator();//獲得Iterator對(duì)象while(it.hasNext()){//判斷該集合是否有下一個(gè)元素Objectobj=it.next();//獲取該集合中的元素if("張三".equals(obj)){//判斷該集合中的元素是否為張三list.remove(obj);//刪除該集合中的元素}}System.out.println(list);腳下留心并發(fā)修改異常案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。腳下留心并發(fā)修改異常案例運(yùn)行結(jié)果分析案例在運(yùn)行時(shí)拋出了并發(fā)修改異常ConcurrentModificationException。這個(gè)異常是迭代器對(duì)象拋出的,出現(xiàn)異常的原因是集合在迭代器運(yùn)行期間刪除了元素,會(huì)導(dǎo)致迭代器預(yù)期的迭代次數(shù)發(fā)生改變,迭代器的迭代結(jié)果不準(zhǔn)確。要解決上述問題,有兩種方式可以采用。腳下留心并發(fā)修改異常并發(fā)修改異常解決方式一從業(yè)務(wù)邏輯上講只想將姓名為張三的學(xué)生刪除,因此只需找到該學(xué)生后跳出循環(huán)不再迭代即可,也就是在案例代碼“l(fā)ist.remove(obj);”下面增加一個(gè)break語句,代碼如下。if("張三".equals(obj)){ list.remove(obj); break;}在使用break語句跳出循環(huán)以后,由于沒有繼續(xù)使用迭代器對(duì)集合中的元素進(jìn)行迭代,所以集合中刪除元素對(duì)程序沒有任何影響,就不會(huì)再出現(xiàn)異常。腳下留心并發(fā)修改異常并發(fā)修改異常解決方式二if("張三".equals(obj)){
it.remove();}如果需要在集合的迭代期間對(duì)集合中的元素進(jìn)行刪除,可以使用迭代器本身的刪除方法,將案例代碼“l(fā)ist.remove(obj);”替換成it.remove()即可解決這個(gè)問題,代碼如下。腳下留心并發(fā)修改異常修改后的運(yùn)行結(jié)果替換代碼后再次運(yùn)行程序,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。7.4.2foreach循環(huán)
先定一個(gè)小目標(biāo)!掌握foreach,能夠使用foreach遍歷集合7.4.2foreach循環(huán)foreach循環(huán)語法格式foreach循環(huán)是一種更加簡潔的for循環(huán)。foreach循環(huán)用于遍歷數(shù)組或集合中的元素,語法格式如下所示:for(容器中元素類型臨時(shí)變量:容器變量){ 執(zhí)行語句}7.4.2foreach循環(huán)案例演示下面通過一個(gè)案例演示foreach循環(huán)的用法。具體代碼如下所示。importjava.util.*;publicclassExample05{ publicstaticvoidmain(String[]args){ ArrayListlist=newArrayList();//創(chuàng)建ArrayList集合 list.add("張三");//向ArrayList集合中添加字符串元素 list.add("李四"); list.add("王五"); for(Objectobj:list){ //使用foreach循環(huán)遍歷ArrayList對(duì)象 System.out.println(obj);//取出并打印ArrayList集合中的元素 } }}7.4.2foreach循環(huán)案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。腳下留心foreach循環(huán)缺陷foreach循環(huán)雖然書寫起來很簡潔,但在使用時(shí)也存在一定的局限性。當(dāng)使用foreach循環(huán)遍歷集合和數(shù)組時(shí),只能訪問集合中的元素,不能對(duì)其中的元素進(jìn)行修改。腳下留心案例演示以一個(gè)String類型的數(shù)組為例演示foreach循環(huán)的缺陷。具體代碼如下所示。foreach循環(huán)缺陷staticString[]strs={"aaa","bbb","ccc"};publicstaticvoidmain(String[]args){//foreach循環(huán)遍歷數(shù)組for(Stringstr:strs){str="ddd"; } System.out.println("foreach循環(huán)修改后的數(shù)組:"+strs[0]+","+strs[1]+","+strs[2]); //for循環(huán)遍歷數(shù)組 for(inti=0;i<strs.length;i++){ strs[i]="ddd"; } System.out.println("普通for循環(huán)修改后的數(shù)組:"+strs[0]+","+strs[1]+","+strs[2]);}腳下留心案例運(yùn)行結(jié)果運(yùn)行程序,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。foreach循環(huán)缺陷腳下留心案例運(yùn)行結(jié)果分析foreach循環(huán)缺陷從上述圖中的運(yùn)行結(jié)果可以看出foreach循環(huán)并不能修改數(shù)組中元素的值。原因是第6行代碼中的str="ddd"只是將臨時(shí)變量str賦值為了一個(gè)新的字符串,這和數(shù)組中的元素沒有一點(diǎn)關(guān)系。而在普通for循環(huán)中,可以通過索引的方式引用數(shù)組中的元素并修改其值。Set接口7.57.5.1Set接口簡介
先定一個(gè)小目標(biāo)!熟悉Set接口簡介,能夠說出HashSet、LinkedHashSet、TreeSet的特點(diǎn)7.5.1Set接口簡介Set接口也繼承自Collection接口,它與Collection接口中的方法基本一致,并沒有對(duì)Collection接口進(jìn)行功能上的擴(kuò)充。與List接口不同的是,Set接口中元素是無序的,并且都會(huì)以某種規(guī)則保證存入的元素不出現(xiàn)重復(fù)。Set接口常見的實(shí)現(xiàn)類有3個(gè),分別是HashSet、LinkedHashSet、TreeSet。其中,HashSet根據(jù)對(duì)象的哈希值來確定元素在集合中的存儲(chǔ)位置,具有良好的存取和查找性能;LinkedHashSet是鏈表和哈希表組合的一個(gè)數(shù)據(jù)存儲(chǔ)結(jié)構(gòu);TreeSet則是以二叉樹的方式存儲(chǔ)元素,它可以對(duì)集合中的元素進(jìn)行排序。Set接口7.5.2HashSet
先定一個(gè)小目標(biāo)!掌握HashSet,能夠使用在Hash中添加和獲取元素7.5.2HashSetHashSet是Set接口的一個(gè)實(shí)現(xiàn)類,它所存儲(chǔ)的元素是不可重復(fù)的。當(dāng)向HashSet集合中添加一個(gè)元素時(shí),首先會(huì)調(diào)用該元素的hashCode()方法來確定元素的存儲(chǔ)位置,然后再調(diào)用元素對(duì)象的equals()方法來確保該位置沒有重復(fù)元素。Set集合與List集合存取元素的方式都一樣,但是Set集合中的元素是無序的。7.5.2HashSet案例一演示下面通過一個(gè)案例學(xué)習(xí)HashSet集合的應(yīng)用。具體代碼如下所示。importjava.util.*;publicclassExample07{publicstaticvoidmain(String[]args){
HashSethset=newHashSet();//創(chuàng)建HashSet集合hset.add("張三");//向該Set集合中添加字符串hset.add("李四");hset.add("王五");hset.add("李四");//向該Set集合中添加重復(fù)元素Iteratorit=hset.iterator();//獲取Iterator對(duì)象while(it.hasNext()){//通過while循環(huán),判斷集合中是否有元素 Objectobj=it.next();//如果有元素,就調(diào)用迭代器的next()方法獲取元素 System.out.println(obj);}}}7.5.2HashSet案例一運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。7.5.2HashSet案例一結(jié)果分析由上圖的打印結(jié)果可以看出,取出元素的順序與添加元素的順序并不一致,并且重復(fù)存入的字符串對(duì)象“李四”被去除了,只添加了一次。7.5.2HashSetHashSet存儲(chǔ)元素的流程當(dāng)調(diào)用HashSet集合的add()方法存入元素時(shí),首先調(diào)用HashSet集合的hashCode()方法獲得元素對(duì)象的哈希值,然后根據(jù)對(duì)象的哈希值計(jì)算出一個(gè)存儲(chǔ)位置。如果該位置上沒有元素,則直接將元素存入。如果該位置上有元素存在,則會(huì)調(diào)用equals()方法讓當(dāng)前存入的元素和該位置上的元素進(jìn)行比較,如果返回的結(jié)果為false,就將該元素存入集合,返回的結(jié)果為true,則說明有重復(fù)元素,就將需要存入的重復(fù)元素舍棄。7.5.2HashSet案例二演示下面通過案例演示向HashSet存儲(chǔ)自定義類對(duì)象。具體代碼如下所示。classStudent{
......//省略聲明變量id和name,省略有參構(gòu)造方法
publicStringtoString(){//重寫toString()方法
returnid+":"+name;
}}publicclassExample08{publicstaticvoidmain(String[]args){
HashSeths=newHashSet();//創(chuàng)建HashSet集合 Studentstu1=newStudent("1","張三");//創(chuàng)建Student對(duì)象 Studentstu2=newStudent("2","李四"); Studentstu3=newStudent("2","李四");
hs.add(stu1);
hs.add(stu2);
hs.add(stu3); System.out.println(hs);}}7.5.2HashSet案例二運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。7.5.2HashSet案例二結(jié)果分析由上圖可知,運(yùn)行結(jié)果中出現(xiàn)了兩個(gè)相同的學(xué)生信息“2:李四”,這樣的學(xué)生信息應(yīng)該被視為重復(fù)元素,不允許同時(shí)出現(xiàn)在HashSet集合中。上面文件之所以沒有去掉這樣的重復(fù)元素,是因?yàn)樵诙xStudent類時(shí)沒有重寫hashCode()和equals()方法。7.5.2HashSet案例演示:向HashSet集合中添加數(shù)據(jù)時(shí)去除重復(fù)數(shù)據(jù)下面改寫案例二中的Student類,假設(shè)id相同的學(xué)生就是同一個(gè)學(xué)生,改寫后的代碼執(zhí)行。具體步驟如下。7.5.2HashSet//重寫hashCode方法publicinthashCode(){ returnid.hashCode(); //返回id屬性的哈希值}//重寫equals方法publicbooleanequals(Objectobj){ if(this==obj){//判斷是否是同一個(gè)對(duì)象 returntrue; //如果是,直接返回true } if(!(objinstanceofStudent)){//判斷對(duì)象是為Student類型 returnfalse; } Studentstu=(Student)obj;//將對(duì)象強(qiáng)轉(zhuǎn)為Student類型 booleanb=this.id.equals(stu.id);//判斷id值是否相同 return b; //返回判斷結(jié)果}步驟一:改寫Student類,在類中重寫hashCode方法和equals方法。代碼如下所示:7.5.2HashSetpublicclassExample09{ publicstaticvoidmain(String[]args){
HashSeths=newHashSet();//創(chuàng)建HashSet對(duì)象 Studentstu1=newStudent("1","張三");//創(chuàng)建Student對(duì)象 Studentstu2=newStudent("2","李四"); Studentstu3=newStudent("2","李四");
hs.add(stu1); //向集合存入對(duì)象
hs.add(stu2);
hs.add(stu3); System.out.println(hs);//打印集合中的元素 }}步驟二:定義main()方法,創(chuàng)建HashSet對(duì)象,并向集合中存入對(duì)象。代碼如下所示:7.5.2HashSet案例三運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。7.5.3LinkedHashSet
先定一個(gè)小目標(biāo)!掌握LinkedHashSet,能夠在LinkedHashSet中添加和獲取元素7.5.3LinkedHashSetHashSet集合存儲(chǔ)的元素是無序的,如果想讓元素的存取順序一致,可以使用Java提供的LinkedHashSet類,LinkedHashSet類是HashSet的子類,與LinkedList一樣,它也使用雙向鏈表來維護(hù)內(nèi)部元素的關(guān)系。7.5.3LinkedHashSet案例演示下面通過一個(gè)案例學(xué)習(xí)LinkedHashSet類的用法。具體代碼如下所示。importjava.util.Iterator;importjava.util.LinkedHashSet;publicclassExample10{publicstaticvoidmain(String[]args){
LinkedHashSetset=newLinkedHashSet();
set.add("張三");//向該Set集合中添加字符串set.add("李四");set.add("王五");Iteratorit=set.iterator();//獲取Iterator對(duì)象while(it.hasNext()){//通過while循環(huán),判斷集合中是否有元素Objectobj=it.next();System.out.println(obj);}}}7.5.3LinkedHashSet案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。由上圖可知,元素迭代出來的順序和存入的順序是一致的。7.5.4TreeSet
先定一個(gè)小目標(biāo)!掌握TreeSet,能夠在TreeSet中添加、獲取、刪除元素7.5.4TreeSetTreeSet集合介紹TreeSet是Set接口的另一個(gè)實(shí)現(xiàn)類,它內(nèi)部采用平衡二叉樹來存儲(chǔ)元素,這樣的結(jié)構(gòu)可以保證TreeSet集合中沒有重復(fù)的元素,并且可以對(duì)元素進(jìn)行排序。所謂二叉樹就是說每個(gè)節(jié)點(diǎn)最多有兩個(gè)子節(jié)點(diǎn)的有序樹,每個(gè)節(jié)點(diǎn)及其子節(jié)點(diǎn)組成的樹稱為子樹,通常左側(cè)的子節(jié)點(diǎn)稱為“左子樹”,右側(cè)的節(jié)點(diǎn)稱為“右子樹”,其中左子樹上的元素小于它的根結(jié)點(diǎn),而右子樹上的元素大于它的根結(jié)點(diǎn)。7.5.4TreeSet二叉樹中元素的存儲(chǔ)結(jié)構(gòu)在二叉樹中,同一層的元素,左邊的元素總是小于右邊的元素。接下來通過一個(gè)具體的圖例來演示二叉樹的存儲(chǔ)過程。7.5.4TreeSet二叉樹的存儲(chǔ)方式假設(shè)向集合中存入8個(gè)元素,依次為13、8、17、17、1、11、15、25,如果以二叉樹的方式來存儲(chǔ),在集合中的存儲(chǔ)結(jié)構(gòu)會(huì)形成一個(gè)樹狀結(jié)構(gòu)。具體存儲(chǔ)方式如下圖所示。7.5.4TreeSetTreeSet集合的特有方法針對(duì)TreeSet集合存儲(chǔ)元素的特殊性,TreeSet在繼承Set接口的基礎(chǔ)上實(shí)現(xiàn)了一些特有的方法。具體如下表所示。方法聲明功能描述Objectfirst()返回TreeSet集合的首個(gè)元素Objectlast()返回TreeSet集合的最后一個(gè)元素Objectlower(Objecto)返回TreeSet集合中小于給定元素的最大元素,如果沒有返回nullObjectfloor(Objecto)返回TreeSet集合中小于或等于給定元素的最大元素,如果沒有返回nullObjecthigher(Objecto)返回TreeSet集合中大于給定元素的最小元素,如果沒有返回nullObjectceiling(Objecto)返回TreeSet集合中大于或等于給定元素的最小元素,如果沒有返回nullObjectpollFirst()移除并返回集合的第一個(gè)元素ObjectpollLast()移除并返回集合的最后一個(gè)元素7.5.4TreeSet案例演示定義main()方法演示TreeSet集合中常用方法的使用,具體代碼如下所示。TreeSetts=newTreeSet();//創(chuàng)建TreeSet集合//1、向TreeSet集合中添加元素ts.add(3);ts.add(29);ts.add(101);ts.add(21);System.out.println("創(chuàng)建的TreeSet集合為:"+ts);//2、獲取首尾元素System.out.println("TreeSet集合首元素為:"+ts.first());System.out.println("TreeSet集合尾部元素為:"+ts.last());//3、比較并獲取元素System.out.println("集合中小于或等于9的最大的一個(gè)元素為:"+ts.floor(9));System.out.println("集合中大于10的最小的一個(gè)元素為:"+ts.higher(10));System.out.println("集合中大于100的最小的一個(gè)元素為:"+ts.higher(100));//4、刪除元素Objectfirst=ts.pollFirst();System.out.println("刪除的第一個(gè)元素是:"+first);System.out.println("刪除第一個(gè)元素后TreeSet集合變?yōu)椋?+ts);7.5.4TreeSet案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。7.5.4TreeSetTreeSet的排序規(guī)則Java提供了兩種TreeSet的排序規(guī)則,分別為自然排序和自定義排序。在默認(rèn)情況下,TreeSet集合都是采用自然排序,接下來將對(duì)這兩種排序規(guī)則進(jìn)行詳細(xì)講解。7.5.4TreeSet自然排序自然排序要求向TreeSet集合中存儲(chǔ)的元素所在類必須實(shí)現(xiàn)Comparable接口,并重寫compareTo()方法,然后TreeSet集合就會(huì)對(duì)該類型元素使用compareTo()方法進(jìn)行比較。compareTo()方法將當(dāng)前對(duì)象與指定的對(duì)象進(jìn)行順序比較,返回值為一個(gè)整數(shù),其中返回負(fù)整數(shù)、零或正整數(shù)分別表示當(dāng)前對(duì)象小于、等于或大于指定對(duì)象,默認(rèn)根據(jù)比較結(jié)果順序排列。7.5.4TreeSet案例演示:compareTo()方法實(shí)現(xiàn)對(duì)象元素的順序存取下面通過一個(gè)案例學(xué)習(xí)將自定義的Student對(duì)象使用compareTo()方法實(shí)現(xiàn)對(duì)象元素的順序存取。具體步驟如下。7.5.4TreeSetimportjava.util.TreeSet;classStudentimplementsComparable{......//省略聲明屬性name和age,重寫toString()方法//重寫Comparable接口的compareTo()方法
publicintcompareTo(Objectobj){
Studentstu=(Student)obj;//定義比較方式,先比較age,再比較name
if(this.age-stu.age>0){
return1;
}
if(this.age-stu.age==0){
returnpareTo();
}
return-1;
}}步驟一:定義Student類并實(shí)現(xiàn)Comparable接口,聲明屬性name和age,重寫toString()方法,重寫Comparable接口的compareTo()方法。代碼如下所示:7.5.4TreeSetpublicclassExample12{publicstaticvoidmain(String[]args){TreeSetts=newTreeSet();ts.add(newStudent("Lucy",18));ts.add(newStudent("Tom",20));ts.add(newStudent("Bob",20));ts.add(newStudent("Tom",20));System.out.println(ts);}}步驟二:定義main()方法,創(chuàng)建TreeSet對(duì)象,添加數(shù)據(jù)并測試輸出。代碼如下所示:7.5.4TreeSet案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。7.5.4TreeSet自定義排序如果不想實(shí)現(xiàn)Comparable接口或者不想按照實(shí)現(xiàn)了Comparable接口的類中compareTo()方法的規(guī)則進(jìn)行排序,可以通過自定義比較器的方式對(duì)TreeSet集合中的元素自定義排序規(guī)則。實(shí)現(xiàn)Comparator接口的類都是一個(gè)自定義比較器,可以在自定義比較器中的compare()方法中自定義排序規(guī)則。7.5.4TreeSet案例演示接下來通過一個(gè)案例在TreeSet集合中自定義排序,排序規(guī)則是先根據(jù)Student的id升序排列,如果id相同則根據(jù)name進(jìn)行升序排列步驟一:創(chuàng)建Student類,在類中聲明屬性id和name,定義有參構(gòu)造方法,并重寫toString()方法。省略步驟一代碼部分,可參考教材案例文件7-13。步驟二:定義main()方法
,創(chuàng)建一個(gè)TreeSet集合并通過匿名內(nèi)部類的方式實(shí)現(xiàn)了Comparator接口,在內(nèi)部類中重寫了Comparator接口的compare()方法。7.5.4TreeSet案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。Map接口7.67.6.1Map接口簡介
先定一個(gè)小目標(biāo)!了解Map接口簡介,能說出Map的特點(diǎn)及常用的增、刪、改、查元素的方法7.6.1Map接口簡介Map接口介紹Map接口是一種雙列集合,它的每個(gè)元素都包含一個(gè)鍵對(duì)象Key和值對(duì)象Value,鍵和值對(duì)象之間存在一種對(duì)應(yīng)關(guān)系,稱為映射。Map中鍵對(duì)象Key不允許重復(fù),訪問Map集合中的元素時(shí),只要指定了Key,就能找到對(duì)應(yīng)的Value。7.6.1Map接口簡介Map接口常用方法Map接口定義了一系列方法用于訪問元素,具體如下所示。方法聲明功能描述voidput(Objectkey,Objectvalue)將指定的值和鍵存入到集合中,并進(jìn)行映射關(guān)聯(lián)Objectget(Objectkey)返回指定鍵所映射的值;如果此映射不包含該鍵的映射關(guān)系,則返回nullvoidclear()移除所有的鍵值對(duì)元素Vremove(Objectkey)根據(jù)鍵刪除對(duì)應(yīng)的值,返回被刪除的值intsize()返回集合中的鍵值對(duì)的個(gè)數(shù)7.6.1Map接口簡介Map接口常用方法方法聲明功能描述booleancontainsKey(Objectkey)如果此映射包含指定鍵的映射關(guān)系,則返回true。booleancontainsValue(Objectvalue)如果此映射將一個(gè)或多個(gè)鍵映射到指定值,則返回trueSetkeySet()返回此映射中包含的鍵的Set集合Collection<V>values()返回此映射中包含的值的Collection集合Set<Map.Entry<K,V>>entrySet()返回此映射中包含的映射關(guān)系的Set集合7.6.2HashMap
先定一個(gè)小目標(biāo)!掌握HashMap,能夠在HashMap中添加、刪除、查找元素。7.6.2HashMapHashMap集合是Map接口的一個(gè)實(shí)現(xiàn)類,HashMap集合中的大部分方法都是Map接口方法的實(shí)現(xiàn)。在開發(fā)中,通常把HashMap集合對(duì)象的引用賦值給Map接口變量,那么接口變量就可以調(diào)用類實(shí)現(xiàn)的接口方法。HashMap集合用于存儲(chǔ)鍵值映射關(guān)系,但HashMap集合沒有重復(fù)的鍵并且鍵值無序。7.6.2HashMap案例演示下面通過一個(gè)案例學(xué)習(xí)HashMap的用法,具體代碼如下所示。importjava.util.*;publicclassExample14{ publicstaticvoidmain(String[]args){
Mapmap=newHashMap();//創(chuàng)建HashMap對(duì)象 map.put("1","張三");//存儲(chǔ)鍵和值 map.put("2","李四"); map.put("3","王五"); System.out.println("1:"+map.get("1"));//根據(jù)鍵獲取值 System.out.println("2:"+map.get("2")); System.out.println("3:"+map.get("3")); }}7.6.2HashMap案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。7.6.2HashMap修改案例,在map.put("3","王五");這行代碼下面增加一行代碼,具體代碼如下所示。map.put("3","趙六");修改后案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。7.6.2HashMap修改后的案例結(jié)果分析由上圖可知,Map中仍然只有3個(gè)元素,只是第二次添加的值“趙六”覆蓋了原來的值“王五”,這也證實(shí)了Map中的鍵必須是唯一的,不能重復(fù),如果存儲(chǔ)了相同的鍵,后存儲(chǔ)的值則會(huì)覆蓋原有的值,簡而言之就是,鍵相同,值覆蓋。7.6.2HashMap第一種取出Map中所有的鍵和值的實(shí)現(xiàn)方式先遍歷Map集合中所有的鍵,再根據(jù)鍵獲取相應(yīng)的值。7.6.2HashMap案例演示下面通過一個(gè)案例演示先遍歷Map集合中所有的鍵,再根據(jù)鍵獲取相應(yīng)的值,具體代碼如下所示。publicclassExample15{ publicstaticvoidmain(String[]args){
Mapmap=newHashMap();//創(chuàng)建HashMap集合 map.put("1","張三");//存儲(chǔ)鍵和值 map.put("2","李四"); map.put("3","王五");
SetkeySet=map.keySet();//獲取鍵的集合 Iteratorit=keySet.iterator();//獲取Iterator對(duì)象 while(it.hasNext()){ Objectkey=it.next(); Objectvalue=map.get(key);//獲取每個(gè)鍵所對(duì)應(yīng)的值 System.out.println(key+":"+value); } }}7.6.2HashMap案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。7.6.2HashMap第二種取出Map中所有的鍵和值的實(shí)現(xiàn)方式先獲取集合中所有的映射關(guān)系,然后從映射關(guān)系中取出鍵和值。7.6.2HashMap案例演示下面通過一個(gè)案例演示先獲取集合中所有的映射關(guān)系,然后從映射關(guān)系中取出鍵和值,具體代碼如下所示。publicstaticvoidmain(String[]args){ Mapmap=newHashMap();//創(chuàng)建HashMap集合 map.put("1","張三"); //存儲(chǔ)鍵和值 map.put("2","李四"); map.put("3","王五"); SetentrySet=map.entrySet(); Iteratorit=entrySet.iterator();//獲取Iterator對(duì)象 while(it.hasNext()){ //獲取集合中鍵值對(duì)映射關(guān)系 Map.Entryentry=(Map.Entry)(it.next()); Objectkey=entry.getKey();//獲取Entry中的鍵 Objectvalue=entry.getValue();//獲取Entry中的值 System.out.println(key+":"+value); }}7.6.2HashMap案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。7.6.2HashMapMap中操作集合的常用方法Map還提供了一些操作集合的常用方法,例如,values()方法用于獲取map實(shí)例中所有的value,返回值類型為Collection;size()方法獲取map集合的大??;containsKey()方法用于判斷是否包含傳入的鍵;containsValue()方法用于判斷是否包含傳入的值;remove()方法用于根據(jù)key移除map中的與該key對(duì)應(yīng)的value等。7.6.2HashMap案例演示下面通過一個(gè)案例演示這些方法的使用,具體代碼如下所示。publicstaticvoidmain(String[]args){Mapmap=newHashMap();//創(chuàng)建HashMap集合map.put("1","張三"); //存儲(chǔ)鍵和值map.put("3","李四");map.put("2","王五");map.put("4","趙六");System.out.println("集合大小為:"+map.size());System.out.println("判斷是否包含傳入的鍵(2):"+map.containsKey("2"));System.out.println("判斷是否包含傳入的值(王五):"+map.containsValue("王五"));System.out.println("移除鍵為1的值是:"+map.remove("1"));Collectionvalues=map.values();Iteratorit=values.iterator();while(it.hasNext()){Objectvalue=it.next();System.out.println(value);}}7.6.2HashMap案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。7.6.3LinkedHashMap
先定一個(gè)小目標(biāo)!掌握LinkedHashMap,能夠在LinkedHashMap中添加、刪除、獲取元素7.6.3LinkedHashMapHashMap集合迭代出來元素的順序和存入的順序是不一致的。如果想讓這Map集合中的元素迭代順序與存入順序一致,可以使用LinkedHashMap集合,LinkedHashMap是HashMap的子類,與LinkedList一樣,LinkedHashMap集合也使用雙向鏈表維護(hù)內(nèi)部元素的關(guān)系,使Map集合元素迭代順序與存入順序一致。7.6.3LinkedHashMap案例演示下面通過一個(gè)案例學(xué)習(xí)LinkedHashMap的用法,具體代碼如下所示。importjava.util.*;publicclassExample18{publicstaticvoidmain(String[]args){
Mapmap=newLinkedHashMap();//創(chuàng)建LinkedHashMap集合map.put("3","李四"); //存儲(chǔ)鍵和值map.put("2","王五");map.put("4","趙六");SetkeySet=map.keySet();Iteratorit=keySet.iterator();while(it.hasNext()){Objectkey=it.next();Objectvalue=map.get(key);//獲取每個(gè)鍵所對(duì)應(yīng)的值System.out.println(key+":"+value);}}}7.6.3LinkedHashMap案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。由圖可知,元素迭代出來的順序和存入的順序是一致的。7.6.4TreeMap
先定一個(gè)小目標(biāo)!掌握TreeMap,能夠在TreeMap中添加、刪除、獲取元素7.6.4TreeMapTreeMap集合HashMap集合存儲(chǔ)的元素的鍵值是無序的和不可重復(fù)的,為了對(duì)集合中的元素的鍵值進(jìn)行排序,Map接口還有了另一個(gè)可以對(duì)集合中元素鍵和值進(jìn)行排序的實(shí)現(xiàn)類TreeMap。7.6.4TreeMap案例演示下面通過一個(gè)案例學(xué)習(xí)TreeMap的用法,具體代碼如下所示。publicclassExample19{publicstaticvoidmain(String[]args){
Mapmap=newTreeMap();//創(chuàng)建TreeMap集合map.put(3,"李四");//存儲(chǔ)鍵和值map.put(2,"王五");map.put(4,"趙六");map.put(3,"張三");SetkeySet=map.keySet();Iteratorit=keySet.iterator();while(it.hasNext()){Objectkey=it.next();Objectvalue=map.get(key);//獲取每個(gè)鍵所對(duì)應(yīng)的值System.out.println(key+":"+value);}}}7.6.4TreeMap案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。7.6.4TreeMap案例結(jié)果分析由上圖可知,添加的元素已經(jīng)按鍵值從小到大進(jìn)行自動(dòng)排序,并且鍵值重復(fù)存入的整數(shù)3只有一個(gè),只是后來添加的值“張三”覆蓋了原來的值“李四”。這也證實(shí)了TreeMap中的鍵必須是唯一的,不能重復(fù)并且有序,如果存儲(chǔ)了相同的鍵,后存儲(chǔ)的值則會(huì)覆蓋原有的值。7.6.4TreeMap案例演示下面通過一個(gè)案例實(shí)現(xiàn)按鍵值排序,在該案例中,鍵是自定義類,值是String類,具體步驟如下所示。classStudent{privateStringname;privateintage;//省略getter/setter方法publicStudent(Stringname,intage){super();=name;this.age=age;}publicStringtoString(){return"Student[name="+name+",age="+age+"]";}}步驟一:定義Student類,聲明name和age屬性,代碼如下所示:7.6.4TreeMappublicstaticvoidmain(String[]args){TreeMaptm=newTreeMap(newComparator<Student>(){publicintcompare(Students1,Students2){intnum=s1.getName().compareTo(s2.getName());//按照姓名比較returnnum==0?num:s1.getAge()-s2.getAge();}});tm.put(newStudent("張三",23),"北京");tm.put(newStudent("李四",13),"上海");tm.put(newStudent("趙六",43),"深圳");tm.put(newStudent("王五",33),"廣州");SetkeySet=tm.keySet();Iteratorit=keySet.iterator();while(it.hasNext()){Objectkey=it.next();Objectvalue=tm.get(key);//獲取每個(gè)鍵所對(duì)應(yīng)的值System.out.println(key+":"+value);}}步驟二:定義main()方法,代碼如下所示:7.6.4TreeMap案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。7.6.5Properties
先定一個(gè)小目標(biāo)!掌握Properties,能夠使用Properties設(shè)置和獲取元素7.6.5PropertiesProperties集合Map接口還有一個(gè)實(shí)現(xiàn)類Hashtable,它和HashMap十分相似,區(qū)別在于Hashtable是線程安全的。Hashtable存取元素時(shí)速度很慢,目前基本上被HashMap類所取代。但Hashtable類有一個(gè)很重要的子類Properties,應(yīng)用非常廣泛。Properties主要用于存儲(chǔ)字符串類型的鍵和值,在實(shí)際開發(fā)中,經(jīng)常使用Properties集合存儲(chǔ)應(yīng)用的配置項(xiàng)。7.6.5Properties假設(shè)有一個(gè)文本編輯工具,要求默認(rèn)背景色是紅色,字體大小為14px,語言為中文,其配置項(xiàng)如下面的代碼。要求使用Properties集合對(duì)這些配置項(xiàng)進(jìn)行存儲(chǔ)。Backgroup-color=redFont-size=14pxLanguage=chinese7.6.5Properties案例演示下面通過一個(gè)案例演示應(yīng)用配置項(xiàng)的存取,具體代碼如下所示。importjava.util.*;publicclassExample21{publicstaticvoidmain(String[]args){
Propertiesp=newProperties();//創(chuàng)建Properties對(duì)象p.setProperty("Backgroup-color","red");p.setProperty("Font-size","14px");p.setProperty("Language","chinese");Enumerationnames=p.propertyNames();//獲取Enumeration對(duì)象所有鍵枚舉while(names.hasMoreElements()){//循環(huán)遍歷所有的鍵 Stringkey=(String)names.nextElement(); Stringvalue=p.getProperty(key);//獲取對(duì)應(yīng)鍵的值 System.out.println(key+"="+value);}}}7.6.5Properties案例運(yùn)行結(jié)果運(yùn)行代碼,控制臺(tái)顯示的運(yùn)行結(jié)果如下圖所示。常用工具類7.77.7.1Collections工具類
先定一個(gè)小目標(biāo)!掌握Collections工具類,使用Collections工具類對(duì)List集合進(jìn)行添加和排序操作,對(duì)Set、List和Map進(jìn)行查找、替換操作7.7.1Collections工具類1.添加、排序操作Collections類提供了一系列方法用于對(duì)List集合進(jìn)行添加和排序操作,常用的方法如下表所示。方法聲明功能描述static<T>booleanaddAll(Collection<?superT>c,T...elements)將所有指定元素添加到指定集合c中staticvoidreverse(Listlist)反轉(zhuǎn)指定List集合中元素的順序staticvoidshuffle(Listlist)隨機(jī)打亂List集合中元素的順序staticvoidsort(Listlist)根據(jù)元素的自然順序(從小到大)對(duì)List集合中的元素進(jìn)行排序staticvoidswap(Listlist,inti,intj)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度酒店并購合同范本:酒店集團(tuán)并購整合案例解析
- 行業(yè)限制合同范本
- 二零二五年度有限公司兼職銷售團(tuán)隊(duì)勞動(dòng)合同
- 二零二五年度大米品牌授權(quán)及市場推廣合作協(xié)議
- 二零二五年度洗浴行業(yè)員工職業(yè)規(guī)劃與雇傭合同
- 2025至2030年中國粗柄機(jī)用絲錐數(shù)據(jù)監(jiān)測研究報(bào)告
- 二零二五年度魚塘承包與漁業(yè)科技研發(fā)合作協(xié)議
- 二零二五年度虛擬主播形象授權(quán)及合作協(xié)議
- 二零二五年度餐飲服務(wù)業(yè)員工勞動(dòng)權(quán)益與社會(huì)保障協(xié)議
- 二零二五年度草原承包經(jīng)營權(quán)租賃合同
- 北京市豐臺(tái)區(qū)2024-2025學(xué)年高二上學(xué)期期末英語試題
- 電力安全一把手講安全課
- 小學(xué)三年級(jí)數(shù)學(xué)口算天天練-A4紙直接打印
- 2025年億達(dá)商學(xué)院成立儀式及論壇經(jīng)驗(yàn)總結(jié)(三篇)
- (2025)駕照C1證考試科目一必考題庫及參考答案(包過版)
- 2025年高三第二學(xué)期物理備課組教學(xué)工作計(jì)劃
- 生產(chǎn)與運(yùn)作管理-第5版 課件全套 陳志祥 第1-14章 生產(chǎn)系統(tǒng)與生產(chǎn)運(yùn)作管理概述 -豐田生產(chǎn)方式與精益生產(chǎn)
- 罕見病診治與病例管理制度
- 課題申報(bào)書:“四新”建設(shè)與創(chuàng)新創(chuàng)業(yè)人才培養(yǎng)基本范式研究
- 婦科常見急危重癥護(hù)理
- 春季高考高職單招數(shù)學(xué)模擬試題七套含答案
評(píng)論
0/150
提交評(píng)論