




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第七章集合常用的集合類Iterator迭代器的使用foreach循環(huán)泛型Collections、Arrays工具7.1Collection接口7.2List接口7.3Set接口7.4Map接口7.5JDK5.0新特性——泛型7.6Collections工具7.7Arrays工具在前面的章節(jié)中介紹過(guò)在程序中可以通過(guò)數(shù)組來(lái)保存多個(gè)對(duì)象,但在某些情況下無(wú)法確定到底需要保存多少個(gè)對(duì)象,此時(shí)數(shù)組將不再適用,因?yàn)閿?shù)組的長(zhǎng)度不可變。JDK中提供了一系列特殊的類,這些類可以存儲(chǔ)任意類型的對(duì)象,并且長(zhǎng)度可變,統(tǒng)稱為集合。集合按照其存儲(chǔ)結(jié)構(gòu)可以分為兩大類,即單列集合Collection和雙列集合Map,第七章集合Collection:?jiǎn)瘟屑项惖母涌?,用于存?chǔ)一系列符合某種規(guī)則的元素,它有兩個(gè)重要的子接口,分別是List和Set。其中,List的特點(diǎn)是元素有序、元素可重復(fù)。Set的特點(diǎn)是元素?zé)o序并且不可重復(fù)。List接口的主要實(shí)現(xiàn)類有ArrayList和LinkedList,Set接口的主要實(shí)現(xiàn)類有HashSet和TreeSet。Map:雙列集合類的根接口,用于存儲(chǔ)具有鍵(Key)、值(Value)映射關(guān)系的元素,每個(gè)元素都包含一對(duì)鍵值,在使用Map集合時(shí)可以通過(guò)指定的Key找到對(duì)應(yīng)的Value,例如根據(jù)一個(gè)學(xué)生的學(xué)號(hào)就可以找到對(duì)應(yīng)的學(xué)生。Map接口的主要實(shí)現(xiàn)類有HashMap和TreeMap。第七章集合集合體系架構(gòu)圖第七章集合7.1Collection接口Collection是所有單列集合的父接口,因此在Collection中定義了單列集合(List和Set)通用的一些方法,這些方法可用于操作所有的單列集合。7.2List接口7.2.1List接口簡(jiǎn)介L(zhǎng)ist接口繼承自Collection接口,是單列集合的一個(gè)重要分支,習(xí)慣性地會(huì)將實(shí)現(xiàn)了List接口的對(duì)象稱為L(zhǎng)ist集合。在List集合中允許出現(xiàn)重復(fù)的元素,所有的元素是以一種線性方式進(jìn)行存儲(chǔ)的,在程序中可以通過(guò)索引來(lái)訪問(wèn)集合中的指定元素。另外,List集合還有一個(gè)特點(diǎn)就是元素有序,即元素的存入順序和取出順序一致。List不但繼承了Collection接口中的全部方法,而且還增加了一些根據(jù)元素索引來(lái)操作集合的特有方法。7.2.1List接口簡(jiǎn)介7.2List接口7.2List接口7.2.2ArrayList集合ArrayList是List接口的一個(gè)實(shí)現(xiàn)類,它是程序中最常見(jiàn)的一種集合在ArrayList內(nèi)部封裝了一個(gè)長(zhǎng)度可變的數(shù)組對(duì)象,當(dāng)存入的元素超過(guò)數(shù)組長(zhǎng)度時(shí),ArrayList會(huì)在內(nèi)存中分配一個(gè)更大的數(shù)組來(lái)存儲(chǔ)這些元素,因此可以將ArrayList集合看作一個(gè)長(zhǎng)度可變的數(shù)組ArrayList集合中大部分方法都是從父類Collection和List繼承過(guò)來(lái)的,其中add()方法和get()方法用于實(shí)現(xiàn)元素的存取。7.2List接口7.2.2ArrayList集合接下來(lái)通過(guò)一個(gè)案例來(lái)學(xué)習(xí)ArrayList集合如何存取元素7.2List接口7.2.3LinkedList集合List接口的另一個(gè)實(shí)現(xiàn)類LinkedList,克服了ArrayList集合在查詢?cè)貢r(shí)速度很快,但在增刪元素時(shí)效率較低的局限性。該集合內(nèi)部維護(hù)了一個(gè)雙向循環(huán)鏈表,鏈表中的每一個(gè)元素都使用引用的方式來(lái)記住它的前一個(gè)元素和后一個(gè)元素,從而可以將所有的元素彼此連接起來(lái)。當(dāng)插入一個(gè)新元素時(shí),只需要修改元素之間的這種引用關(guān)系即可,刪除一個(gè)節(jié)點(diǎn)也是如此。7.2List接口7.2.3LinkedList集合LinkedList集合添加元素和刪除元素的過(guò)程如圖。7.2List接口7.2.3LinkedList集合LinkedList集合除了具備增刪元素效率高的特點(diǎn),還專門(mén)針對(duì)元素的增刪操作定義了一些特有的方法。7.2List接口7.2.3LinkedList集合接下來(lái)通過(guò)一個(gè)案例來(lái)學(xué)習(xí)這些方法的使用。7.2List接口7.2.4Iterator集合Iterator接口也是Java集合框架中的一員,但它與Collection、Map接口有所不同,Collection接口與Map接口主要用于存儲(chǔ)元素,而Iterator主要用于迭代訪問(wèn)(即遍歷)Collection中的元素,因此Iterator對(duì)象也被稱為迭代器。通過(guò)一個(gè)案例來(lái)學(xué)習(xí)如何使用Iterator迭代集合中的元素。7.2.4Iterator集合7.2List接口需要特別說(shuō)明的是,當(dāng)通過(guò)迭代器獲取ArrayList集合中的元素時(shí),都會(huì)將這些元素當(dāng)做Object類型來(lái)看待,如果想得到特定類型的元素,則需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換。7.2List接口7.2.4Iterator集合Iterator迭代器對(duì)象在遍歷集合時(shí),內(nèi)部采用指針的方式來(lái)跟蹤集合中的元素,為了讓初學(xué)者能更好地理解迭代器的工作原理,接下來(lái)通過(guò)一個(gè)圖例來(lái)演示Iterator對(duì)象迭代元素的過(guò)程。7.2List接口7.2.5JDK5.0新特性——foreach循環(huán)雖然Iterator可以用來(lái)遍歷集合中的元素,但寫(xiě)法上比較繁瑣,為了簡(jiǎn)化書(shū)寫(xiě),從JDK5.0開(kāi)始,提供了foreach循環(huán)。foreach循環(huán)是一種更加簡(jiǎn)潔的for循環(huán),也稱增強(qiáng)for循環(huán)。foreach循環(huán)用于遍歷數(shù)組或集合中的元素,其具體語(yǔ)法格式如下:7.2List接口7.2.5JDK5.0新特性——foreach循環(huán)與for循環(huán)相比,foreach循環(huán)不需要獲得容器的長(zhǎng)度,也不需要根據(jù)索引訪問(wèn)容器中的元素,但它會(huì)自動(dòng)遍歷容器中的每個(gè)元素。腳下留心1、foreach循環(huán)雖然書(shū)寫(xiě)起來(lái)很簡(jiǎn)潔,但在使用時(shí)也存在一定的局限性。當(dāng)使用foreach循環(huán)遍歷集合和數(shù)組時(shí),只能訪問(wèn)集合中的元素,不能對(duì)其中的元素進(jìn)行修改,接下來(lái)以一個(gè)String類型的數(shù)組為例來(lái)進(jìn)行演示。腳下留心2、在使用Iterator迭代器對(duì)集合中的元素進(jìn)行迭代時(shí),如果調(diào)用了集合對(duì)象的remove()方法去刪除元素,會(huì)出現(xiàn)異常。接下來(lái)通過(guò)一個(gè)案例來(lái)演示這種異常。假設(shè)在一個(gè)集合中存儲(chǔ)了學(xué)校所有學(xué)員的姓名,由于一個(gè)名為Annie的學(xué)生中途轉(zhuǎn)學(xué),這時(shí)就需要在迭代集合時(shí)找出該元素并將其刪除,具體代碼如例程7-6所示。例程7-6在運(yùn)行時(shí)出現(xiàn)了并發(fā)修改異常ConcurrentModificationException。這個(gè)異常是迭代器對(duì)象拋出的,出現(xiàn)異常的原因是集合中刪除了元素會(huì)導(dǎo)致迭代器預(yù)期的迭代次數(shù)發(fā)生改變,導(dǎo)致迭代器的結(jié)果不準(zhǔn)確。為了解決上述問(wèn)題,可以采用兩種方式:腳下留心第一種方式:從業(yè)務(wù)邏輯上講只想將姓名為Annie的學(xué)生刪除,至于后面還有多少學(xué)生我們并不關(guān)心,所以只需找到該學(xué)生后跳出循環(huán)不再迭代即可,也就是在第13行代碼下面增加一個(gè)break語(yǔ)句,代碼如下:在使用break語(yǔ)句跳出循環(huán)以后,由于沒(méi)有繼續(xù)使用迭代器對(duì)集合中的元素進(jìn)行迭代,因此,集合中刪除元素對(duì)程序沒(méi)有任何影響,不會(huì)出現(xiàn)異常。腳下留心第二種方式:如果需要在集合的迭代期間對(duì)集合中的元素進(jìn)行刪除,可以使用迭代器本身的刪除方法,將例程7-6中第13行代碼替換成it.remove()即可解決這個(gè)問(wèn)題,代碼如下:7.2List接口7.2.6ListIterator接口Iterator迭代器提供了hasNext()方法和next()方法,通過(guò)這兩個(gè)方法可以實(shí)現(xiàn)集合中元素的迭代,迭代的方向是從集合中的第一個(gè)元素向最后一個(gè)元素迭代,也就是所謂的正向迭代。為了使迭代方式更加多元化,JDK中還定義了一個(gè)ListIterator迭代器,它是Iterator的子類,該類在父類的基礎(chǔ)上增加了一些特有方法。7.2List接口7.2.6ListIterator接口通過(guò)一個(gè)案例來(lái)學(xué)習(xí)ListIterator迭代器的使用:7.2List接口7.2.7Enumeration接口在JDK1.2以前還沒(méi)有Iterator接口的時(shí)候,遍歷集合需要使用Enumeration接口,它的用法和Iterator類似。JDK中提供了一個(gè)Vevtor集合,該集合是List接口的一個(gè)實(shí)現(xiàn)類,用法與ArrayList完全相同,區(qū)別在于Vector集合是線程安全的,而ArrayList集合是線程不安全的。在Vector類中提供了一個(gè)elements()方法用于返回Enumeration對(duì)象,通過(guò)Enumeration對(duì)象就可以遍歷該集合中的元素。7.2List接口7.2.7Enumeration接口通過(guò)一個(gè)案例來(lái)演示如何使用Enumeration對(duì)象遍歷Vector集合:7.3Set接口7.3.1Set接口簡(jiǎn)介Set接口和List接口一樣,同樣繼承自Collection接口,它與Collection接口中的方法基本一致,并沒(méi)有對(duì)Collection接口進(jìn)行功能上的擴(kuò)充,只是比Collection接口更加嚴(yán)格了。與List接口不同的是,Set接口中元素?zé)o序,并且都會(huì)以某種規(guī)則保證存入的元素不出現(xiàn)重復(fù)。Set接口主要有兩個(gè)實(shí)現(xiàn)類,分別是HashSet和TreeSet。其中,HashSet是根據(jù)對(duì)象的哈希值來(lái)確定元素在集合中的存儲(chǔ)的位置,因此具有良好的存取和查找性能。TreeSet則是以二叉樹(shù)的方式來(lái)存儲(chǔ)元素,它可以實(shí)現(xiàn)對(duì)集合中的元素進(jìn)行排序。7.3Set接口7.3.2HashSet集合HashSet是Set接口的一個(gè)實(shí)現(xiàn)類,它所存儲(chǔ)的元素是不可重復(fù)的,并且元素都是無(wú)序的。當(dāng)向HashSet集合中添加一個(gè)對(duì)象時(shí),首先會(huì)調(diào)用該對(duì)象的hashCode()方法來(lái)確定元素的存儲(chǔ)位置,然后再調(diào)用對(duì)象的equals()方法來(lái)確保該位置沒(méi)有重復(fù)元素。接下來(lái)通過(guò)一個(gè)案例來(lái)演示HashSet集合的用法:7.3Set接口7.3.2HashSet集合HashSet集合之所以能確保不出現(xiàn)重復(fù)的元素,是因?yàn)樗诖嫒朐貢r(shí)做了很多工作。當(dāng)調(diào)用HashSet集合的add()方法存入元素時(shí),首先調(diào)用當(dāng)前存入對(duì)象的hashCode()方法獲得對(duì)象的哈希值,然后根據(jù)對(duì)象的哈希值計(jì)算出一個(gè)存儲(chǔ)位置。如果該位置上沒(méi)有元素,則直接將元素存入,如果該位置上有元素存在,則會(huì)調(diào)用equals()方法讓當(dāng)前存入的元素依次和該位置上的元素進(jìn)行比較,如果返回的結(jié)果為false就將該元素存入集合,返回的結(jié)果為true則說(shuō)明有重復(fù)元素,就將該元素舍棄。7.3Set接口7.3.2HashSet集合根據(jù)前面的分析不難看出,當(dāng)向集合中存入元素時(shí),為了保證HasheSet正常工作,要求在存入對(duì)象時(shí),需要重寫(xiě)Object類中的hashCode()和equals()方法。例程7-9中將字符串存入HashSet時(shí),String類已經(jīng)重寫(xiě)了hashCode()和equals()方法。但是如果將Student對(duì)象存入HashSet,結(jié)果又如何呢?7.3Set接口7.3.2HashSet集合接下來(lái)針對(duì)例程7-10中的Student類進(jìn)行改寫(xiě),假設(shè)id相同的學(xué)生就是同一個(gè)學(xué)生,改寫(xiě)后的代碼如例程7-11所示。7.3Set接口7.3.3TreeSet集合TreeSet是Set接口的另一個(gè)實(shí)現(xiàn)類,它內(nèi)部采用平衡二叉樹(shù)來(lái)存儲(chǔ)元素,這樣的結(jié)構(gòu)可以保證TreeSet集合中沒(méi)有重復(fù)的元素,并且可以對(duì)元素進(jìn)行排序。所謂二叉樹(shù)就是說(shuō)每個(gè)節(jié)點(diǎn)最多有兩個(gè)子節(jié)點(diǎn)的有序樹(shù),每個(gè)節(jié)點(diǎn)及其子節(jié)點(diǎn)組成的樹(shù)稱為子樹(shù),通常左側(cè)的子節(jié)點(diǎn)稱為“左子樹(shù)”,右側(cè)的節(jié)點(diǎn)稱為“右子樹(shù)”,其中左子樹(shù)上的元素應(yīng)小于它的根結(jié)點(diǎn),而右子樹(shù)上的元素應(yīng)大于它的根結(jié)點(diǎn)。7.3Set接口7.3.3TreeSet集合二叉樹(shù)中元素的存儲(chǔ)過(guò)程:當(dāng)二叉樹(shù)中存入新元素時(shí),新元素首先會(huì)與第1個(gè)元素(最頂層元素)進(jìn)行比較,如果小于第1個(gè)元素就執(zhí)行左邊的分支,繼續(xù)和該分支的子元素進(jìn)行比較。如果大于第1個(gè)元素就執(zhí)行右邊的分支,繼續(xù)和該分支的子元素進(jìn)行比較。如此往復(fù),直到與最后一個(gè)元素進(jìn)行比較時(shí),如果新元素小于最后一個(gè)元素就將其放在最后一個(gè)元素的左子樹(shù)上,如果大于最后一個(gè)元素就將其放在最后一個(gè)元素的右子樹(shù)上。7.3Set接口7.3.3TreeSet集合假設(shè)向集合中存入8個(gè)元素,依次為13、8、17、17、1、11、15、25,如果以二叉樹(shù)的方式來(lái)存儲(chǔ),在集合中的存儲(chǔ)結(jié)構(gòu)會(huì)形成一個(gè)樹(shù)狀結(jié)構(gòu)。7.3Set接口7.3.3TreeSet集合通過(guò)一個(gè)案例來(lái)演示TreeSet對(duì)元素的排序效果。7.3Set接口7.3.3TreeSet集合在TreeSet集合中存放Student類型對(duì)象時(shí),如果Student類沒(méi)有實(shí)現(xiàn)Comparable接口,則Student類型的對(duì)象將不能進(jìn)行比較,這時(shí),TreeSet集合就不知道按照什么排序規(guī)則對(duì)Student對(duì)象進(jìn)行排序,最終導(dǎo)致程序報(bào)錯(cuò)。因此,為了在TreeSet集合中存放Student對(duì)象,必須使Student類實(shí)現(xiàn)Comparable接口。7.3Set接口7.3.3TreeSet集合定義的類沒(méi)有實(shí)現(xiàn)Comparable接口或者對(duì)于實(shí)現(xiàn)了Comparable接口的類而不想按照定義的compareTo()方法進(jìn)行排序,,例如,希望字符串可以按照長(zhǎng)度來(lái)進(jìn)行排序,這時(shí),可以通過(guò)自定義比較器的方式對(duì)TreeSet集合中的元素排序,即實(shí)現(xiàn)Comparator接口,在創(chuàng)建TreeSet集合時(shí)指定比較器。接下來(lái)通過(guò)一個(gè)案例來(lái)實(shí)現(xiàn)TreeSet集合中字符串按照長(zhǎng)度進(jìn)行排序。7.4Map接口7.4.1Map接口簡(jiǎn)介在現(xiàn)實(shí)生活中,每個(gè)人都有唯一的身份證號(hào),通過(guò)身份證號(hào)可以查詢到這個(gè)人的信息,這兩者是一對(duì)一的關(guān)系。在應(yīng)用程序中,如果想存儲(chǔ)這種具有對(duì)應(yīng)關(guān)系的數(shù)據(jù),則需要使用JDK中提供的Map接口。Map接口是一種雙列集合,它的每個(gè)元素都包含一個(gè)鍵對(duì)象Key和值對(duì)象Value,鍵和值對(duì)象之間存在一種對(duì)應(yīng)關(guān)系,稱為映射。從Map集合中訪問(wèn)元素時(shí),只要指定了Key,就能找到對(duì)應(yīng)的Value。7.4Map接口7.4.1Map接口簡(jiǎn)介首先了解一下Map接口中定義的一些通用方法。Map接口提供了大量的實(shí)現(xiàn)類,最常用的有HashMap和TreeMap,接下來(lái)針對(duì)這兩個(gè)類進(jìn)行詳細(xì)地講解。7.4Map接口7.4.2HashMap集合HashMap集合是Map接口的一個(gè)實(shí)現(xiàn)類,它用于存儲(chǔ)鍵值映射關(guān)系,但必須保證不出現(xiàn)重復(fù)的鍵。7.4Map接口7.4.2HashMap集合現(xiàn)對(duì)例程7-15進(jìn)行修改,在第7行代碼下面增加一行代碼,如下所示:map.put("3","Mary");7.4Map接口7.4.2HashMap集合在程序開(kāi)發(fā)中,經(jīng)常需要取出Map中所有的鍵和值,那么如何遍歷Map中所有的鍵值對(duì)呢?有兩種方式可以實(shí)現(xiàn),第一種方式就是先遍歷Map集合中所有的鍵,再根據(jù)鍵獲取相應(yīng)的值。7.4Map接口7.4.2HashMap集合在程序開(kāi)發(fā)中,經(jīng)常需要取出Map中所有的鍵和值,那么如何遍歷Map中所有的鍵值對(duì)呢?Map集合的另外一種遍歷方式是先獲取集合中的所有的映射關(guān)系,然后從映射關(guān)系中取出鍵和值。7.4Map接口7.4.2HashMap集合在Map中,還提供了一個(gè)values()方法,通過(guò)這個(gè)方法可以直接獲取Map中存儲(chǔ)所有值的Collection集合。7.4Map接口7.4.2HashMap集合從上面的例子可以看出,HashMap集合迭代出來(lái)元素的順序和存入的順序是不一致的。如果想讓這兩個(gè)順序一致,可以使用Java中提供的LinkedHashMap類,它是HashMap的子類,和LinkedList一樣也使用雙向鏈表來(lái)維護(hù)內(nèi)部元素的關(guān)系,使Map元素迭代的順序與存入的順序一致。7.4Map接口7.4.3TreeMap集合TreeMap集合是用來(lái)存儲(chǔ)鍵值映射關(guān)系的,其中不允許出現(xiàn)重復(fù)的鍵。在TreeMap中是通過(guò)二叉樹(shù)的原理來(lái)保證鍵的唯一性,這個(gè)TreeSet集合存儲(chǔ)的原理一樣,因此TreeMap中所有的鍵是按照某種順序排列的。7.4Map接口7.4.3TreeMap集合在使用TreeMap集合時(shí),也可以通過(guò)自定義比較器的方式對(duì)所有的鍵進(jìn)行排序。7.4Map接口7.4.4Properties集合Map接口中還有一個(gè)實(shí)現(xiàn)類Hashtable,它在存取元素時(shí)速度很慢,目前基本上被HashMap類所取代。但Hashtable類有一個(gè)子類Properties在實(shí)際應(yīng)用中非常重要,Properties主要用來(lái)存儲(chǔ)字符串類型的鍵和值,在實(shí)際開(kāi)發(fā)中,經(jīng)常使用Properties集合來(lái)存取應(yīng)用的配置項(xiàng)。假設(shè)有一個(gè)文本編輯工具,要求默認(rèn)背景色是紅色,字體大小為14px,語(yǔ)言為中文,其配置項(xiàng)應(yīng)該是下面的樣子:7.4Map接口7.4.4Properties集合在程序中可以使用Prorperties集合對(duì)這些配置項(xiàng)進(jìn)行存取,接下來(lái)通過(guò)一個(gè)案例來(lái)學(xué)習(xí):7.5JDK5.0新特性
——泛型7.5.1為什么使用泛型當(dāng)把一個(gè)對(duì)象存入集合后,集合會(huì)“忘記”這個(gè)對(duì)象的類型,將該對(duì)象從集合中取出時(shí),這個(gè)對(duì)象的編譯類型就變成了Object類型。換句話說(shuō),我們?cè)诔绦蛑袩o(wú)法確定一個(gè)集合中的元素到底是什么類型的。那么在取出元素時(shí),如果進(jìn)行強(qiáng)制類型轉(zhuǎn)換就很容易出錯(cuò)。7.5JDK5.0新特性
——泛型7.5.1為什么使用泛型為了解決這個(gè)問(wèn)題,在Java中引入了“參數(shù)化類型(parameterizedtype)”這個(gè)概念,即泛型。它可以限定方法操作的數(shù)據(jù)類型,在定義集合類時(shí),可以使用“<參數(shù)化類型>”的方式指定該類中方法操作的數(shù)據(jù)類型。上面這種寫(xiě)法就限定了ArrayList集合只能存儲(chǔ)String類型元素,將改寫(xiě)后的程序再次編譯,程序在編譯時(shí)期就會(huì)出現(xiàn)錯(cuò)誤提示。7.5JDK5.0新特性
——泛型7.5.1為什么使用泛型程序編譯報(bào)錯(cuò)的原因是修改后的代碼限定了集合元素的數(shù)據(jù)類型,ArrayList<String>這樣的集合只能存儲(chǔ)String類型的元素,程序在編譯時(shí),編譯器檢查出Integer類型的元素與List集合的規(guī)定的類型不匹配,編譯不通過(guò),這樣就可以在編譯時(shí)期解決錯(cuò)誤,避免程序在運(yùn)行時(shí)期發(fā)生錯(cuò)誤。接下來(lái)使用泛型再次對(duì)例程7-23進(jìn)行改寫(xiě)7.5JDK5.0新特性
——泛型7.5.2自定義泛型那么泛型的作用是什么,在程序中是否能自定義泛型呢?7.5JDK5.0新特性
——泛型7.5.2自定義泛型從運(yùn)行結(jié)果可以看出,程序在編譯時(shí)期就報(bào)錯(cuò),這是因?yàn)樵诖a第13行處存入了一個(gè)Integer類型的數(shù)據(jù),在代碼第14行處取出這個(gè)數(shù)據(jù)時(shí),將該數(shù)據(jù)轉(zhuǎn)換成了String類型,出現(xiàn)了類型不匹配的錯(cuò)誤。為了避免這個(gè)問(wèn)題,就可以使用泛型,如果在定義一個(gè)類CachePool時(shí)使用<T>聲明參數(shù)類型,(T其實(shí)就是Type的縮寫(xiě),這里也可以使用其它字符,為了方便理解都定義為T(mén)),將save()方法的參數(shù)類型和get()方法的返回值類型都聲明為T(mén),那么在存入元素時(shí)元素的類型就被限定了,容器中就只能存入這種T類型的元素,在取出元素時(shí)就無(wú)需進(jìn)行類型轉(zhuǎn)換。7.5JDK5.0新特性
——泛型7.5.2自定義泛型通過(guò)一個(gè)案例來(lái)看一下如何自定義泛型。7.6Collections工具類JDK提供了一個(gè)工具類專門(mén)用來(lái)操作集合,這個(gè)類就是Collections,它位于java.util包中。Collections類中提供了大量的方法用于對(duì)集合中元素進(jìn)行排序、查找和修改等操作,接下來(lái)對(duì)這些常用的方法進(jìn)行介紹。7.6Collections工具類1、 排序操作Collections類中提供了一系列方法用于對(duì)List集合進(jìn)行排序7.6Collections工具類1、 排序操作Collections類中提供了一系列方法用于對(duì)List集合進(jìn)行排序7.6Collections工具類2、查找、替換操作Collections類還提供了一些常用方法用于查找、替換集合中的元素7.6Collections工具類2、查找、替換操作Collections類還提供了一些常用方法用于查找、替換集合中的元素7.7 Arrays工具類java.util包中還提供了一個(gè)專門(mén)用于操作數(shù)組的工具類——Arrays。Arrays工具類提供了大量的靜態(tài)方法。
1、使用Arrays的sort()方法排序在前面學(xué)習(xí)數(shù)組時(shí),要想對(duì)數(shù)組進(jìn)行排序就需要自定義一個(gè)排序方法,其實(shí)也可以使用Arrays工具類中的靜態(tài)方法sort()來(lái)實(shí)現(xiàn)這個(gè)功能,接下來(lái)通過(guò)一個(gè)案例來(lái)學(xué)習(xí)sort()方法的使用。7.7 Arrays工具類2、使用Arrays的binarySearch(Object[]a,Objectkey)方法查找元素程序開(kāi)發(fā)中,經(jīng)常會(huì)在數(shù)組中查找某些特定的元素,如果數(shù)組中元素較多時(shí)查找某個(gè)元素就會(huì)非常繁瑣,為此,Arrays類中提供還了一個(gè)方法binarySearch(Object[]a,Objectkey)用于查找元素,接下來(lái)通過(guò)一個(gè)案例來(lái)學(xué)習(xí)該方法的使用。7.7 Arrays工具類2、使用Arrays的binarySearch(Object[]a,Objectkey)方法查找元素所謂二分法查找就是每次將指定元素和數(shù)組中間位置的元素進(jìn)行比較,從而排除掉其中的一半元素,這樣的查找是非常高效的。接下來(lái)通過(guò)一個(gè)圖例來(lái)演示二分法查找
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 技術(shù)服務(wù)支持與維護(hù)服務(wù)合同
- 2023年黑龍江公務(wù)員行測(cè)考試真題及答案
- 貴州國(guó)企招聘2025六盤(pán)水市公共交通有限公司招聘合同制駕駛員30人筆試參考題庫(kù)附帶答案詳解
- 浙江國(guó)企招聘2025寧波市奉化區(qū)惠海地下管線投資有限公司招聘6人筆試參考題庫(kù)附帶答案詳解
- 2025浙江溫州市國(guó)資委公開(kāi)遴選市屬國(guó)有企業(yè)外部董事專家?guī)烊诉x40人筆試參考題庫(kù)附帶答案詳解
- 2025山東海匯集團(tuán)有限公司招聘88人筆試參考題庫(kù)附帶答案詳解
- 王者考試測(cè)試題及答案
- 終止工程合同協(xié)議書(shū)
- 買(mǎi)合伙合同協(xié)議書(shū)
- 買(mǎi)受人拍賣(mài)合同協(xié)議書(shū)
- 中學(xué)家長(zhǎng)委員會(huì)活動(dòng)策劃方案
- 初二家長(zhǎng)會(huì)課件
- 報(bào)紙購(gòu)銷合同模板
- 酒吧消防合同范本
- ?;妨呀饬鸦嘤?xùn)
- 個(gè)私協(xié)會(huì)工作總結(jié)
- 哺乳動(dòng)物專題知識(shí)講座
- 城市公共空間設(shè)計(jì)創(chuàng)新
- 簡(jiǎn)易安全管理檢維修作業(yè)風(fēng)險(xiǎn)分析和安全措施課件
- 24年追覓在線測(cè)評(píng)28題及答案
- 2024年雅安市人力資源和社會(huì)保障局公開(kāi)招聘編外工作人員1人高頻難、易錯(cuò)點(diǎn)500題模擬試題附帶答案詳解
評(píng)論
0/150
提交評(píng)論