JavaSE第七講Java中的集合框架.ppt_第1頁
JavaSE第七講Java中的集合框架.ppt_第2頁
JavaSE第七講Java中的集合框架.ppt_第3頁
JavaSE第七講Java中的集合框架.ppt_第4頁
JavaSE第七講Java中的集合框架.ppt_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Java SE,第七講,Java中的集合框架,概述,容器類類庫的用途是持有對象,所有的容器都只能保存對Object的引用。 Collection: 一組獨立的元素 List: 必須保持元素特定的順序 Set: 不能有重復(fù)元素 Map: 一組成對的鍵值對(key-value pair,key and value are all objects)對象。因此Map 可以返回所有鍵(key)組成的 Set,所有值(value)組成的Collection。,集合框架圖,更多的時候我們只關(guān)心頂層的接口(interface)和具體的實現(xiàn)類(concrete class),而且不再推薦使用遺留的類(如Vector、Hashtable等)??梢詫⑸蠄D簡化為右圖:,簡化的集合框架圖,容器中的對象都是Object,容器中只能容納對象,不能容納基本類型 在將對象加入容器的時候就丟失了類型信息 在使用容器中的元素前必須要做類型轉(zhuǎn)換操作,Java SE的自動裝箱(Auto-boxing)與拆箱(Auto-unboxing),基本數(shù)據(jù)類型(primitive type)與對應(yīng)的包裝類(wrapper class)之間可以自動進行轉(zhuǎn)換。 注意關(guān)于null引用的拆箱和相等性“”的判斷,容器中可以容納基本類型,Java SE增加了自動拆裝箱的特性后,容器中就可以容納基本類型了。 把基本類型放入容器前自動裝箱 從容器中取基本類型前自動拆箱,Java SE的泛型(Generic type),泛型支持定義帶有類型參數(shù)(Parameterized type)的類,這些參數(shù)由您在實例化時指定。泛型為提高大型程序的類型安全和可維護性帶來了很大的潛力。 泛型在本質(zhì)上是指參數(shù)化類型 操作參數(shù)化類型的類,接口或者方法被稱作泛型,如泛型類或泛型方法。,Point.java,限定容器中能持有的對象類型,Java SE增加范性機制后,就可以限定容器中能持有的對象類型。 對象放入容器后不會自動丟失類型信息 從容器中取對象不需要轉(zhuǎn)型 類型安全,減少開發(fā)的復(fù)雜度,迭代器(Iterator),遍歷并選擇序列中的對象??蛻舳顺绦騿T不關(guān)心序列底層的結(jié)構(gòu)。 集合對象的iterator()方法要求容器返回一個Iterator。第一次調(diào)用Iterator的next()方法時,它返回序列的第一個元素 。 使用next()獲得序列中的下一個元素。而且只能向下移動 使用hasNext()檢查序列中是否還有元素 使用remove()將上一次返回的元素從迭代器中移除,List 接口,次序是 List 最重要的特點;它保證維護元素特定的順序 。 ArrayList,由數(shù)組實現(xiàn)的List。允許對元素進行快速隨機訪問,但是向List 中間插入與移除元素的速度很慢 。 LinkedList,對順序訪問進行了優(yōu)化,向 List 中間插入與刪除的開銷并不大。隨機訪問則相對較慢 。,TestLinkedList.java,TestArrayList.java,Set 接口,存入 Set 的每個元素都必須是唯一的。因為Set 不保存重復(fù)元素,加入 Set 的元素必須定義equals()方法以確保對象的唯一性。Set 接口不保證維護元素的次序 。 HashSet:為快速查找設(shè)計的Set。存入HashSet 的對象必須定義hashCode() 重載equals()方法時永遠要重載hashCode()方法。否則的話會導(dǎo)致類與所有基于散列的集合一起使用時不能正常工作,這些集合包括HashSet、HashMap和Hashtable 。,Set 接口,java.lang.Object規(guī)范的約定 如果在應(yīng)用程序執(zhí)行期間,用于對象的equals()方法中的信息不被修改,那么對同一對象的多次調(diào)用,hashCode()方法總是返回相同的整數(shù)。這個整數(shù)不要求在同一應(yīng)用程序的不同執(zhí)行間保持一致 。 如果兩個對象按照equals()方法是相同的,那么對這兩個對象的任一個調(diào)用hashCode()方法,必須要產(chǎn)生同樣的整數(shù)結(jié)果 如果兩個對象根據(jù)equals()方法不相同,那么對這兩個對象中的任一個對象調(diào)用hashCode()方法,不要求產(chǎn)生兩個不同的整數(shù)結(jié)果。但是,為不相等的對象產(chǎn)生不同的整數(shù)結(jié)果可以提高hash表的性能 。,PhoneNumber.java,Set 接口,LinkedHashSet:具有 HashSet 的查詢速度,同時使用鏈表維護元素的次序,使得看起來元素是以插入的順序保存的。 SortedSet:保持次序的 Set,底層為樹結(jié)構(gòu)。使用它可以從Set中提取有序的序列 。 TreeSet是接口SortedSet的唯一實現(xiàn)類,SortedSet的意思是“按比較函數(shù)對元素排序”,而不是指“元素插入的次序”。插入到SortedSet中的元素必須實現(xiàn)java.lang.Comparable接口(或者能夠被一個特定的Comporator接受);并且所有的元素必須必須可以相互比較,否則會拋出ClassCastException。強烈建議compareTo()方法的相等測試與equals()方法有同樣的結(jié)果 。,TestSortedSet.java,PhoneNumber2.java,Map 接口,ArrayList 使用數(shù)字從對象序列中選擇元素,因此它在數(shù)字與對象之間建立了關(guān)聯(lián)。Map維護“鍵值對”的關(guān)聯(lián)性,使你可以通過“鍵”查找“值” 。 LinkedHashMap:類似于 HashMap,但是迭代遍歷它時,取得“鍵值對”的順序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap 慢一點。而在迭代訪問時反而更快,因為它使用鏈表維護內(nèi)部次序 。 SortedMap:確?!版I值對”中的“鍵”處于排序狀態(tài),其中TreeMap是其唯一實現(xiàn) 。,TestLinkedHashMap.java,HashMap & Hashtable,HashMap是Hashtable的輕量級實現(xiàn)(非線程安全的實現(xiàn)),他們都實現(xiàn)了Map接口,主要區(qū)別在于 : HashMap允許空(null)鍵值(key),而Hashtable不允許。HashMap由于非線程安全,效率上要高于Hashtable 。 HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey。因為contains方法容易讓人引起誤解 。,TestHashMap.java,HashMap & Hashtable,Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map 接口的一個實現(xiàn)。最大的不同是Hashtable的方法是Synchronize的,而HashMap不是,在多個線程訪問Hashtable時,不需要自己為它的方法實現(xiàn)同步,而HashMap 就必須為之提供同步 。 Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會有很大的差異 。,ArrayList & Vector,ArrayList與Vector都是使用數(shù)組方式存

溫馨提示

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

評論

0/150

提交評論