版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
Java高級
第十一章集合框架
主要內(nèi)容:
集合類框架的概念集合類接口與類兩個特殊的集合類
Java1.0/1.1的集合類集合類框架的概念集合類和集合接口關系圖所謂框架就是一個類庫的集合。集合框架就是一個用來表示和操作集合的統(tǒng)一的架構,包含了實現(xiàn)集合的接口與類。集合類和集合接口關系圖解讀實線框圖表示集合類;虛線框圖表示集合接口;虛線連接的空心箭頭表示接口之間的繼承或類對接口的實現(xiàn)關系;實線表示類之間的繼承關系。實心箭頭表示一個接口方法可以返回另一個接口可引用的實例。圖中還展示了集合類相關的一些功能類如:Collections和Arrays,它們封裝有特定的集合操作功能。集合類接口六大集合類接口之一——Collection接口collection是集合類的基本接口,它用來說明作為一個集合類應有的特征屬性并為一組對象的操作提供了一些簡單的方法。子接口有:List和Set它的實現(xiàn)類有:AbstractCollection,AbstractList,AbstractSet,ArrayList,BeanContextServicesSupport,BeanContextSupport,HashSet,LinkedHashSet,LinkedList,TreeSet,Vector。Collection接口提供的主要方法boolean
add(Objectc):用于向集合中添加一個新元素。boolean
addAll(Collection
c):用于添加一組元素。boolean
remove(Object
o):用于刪除一個元素。booleanremoveAll(Collectionc):用于刪除一組元素。Object[]toArray():把集合轉換成對象數(shù)組引用返回。Object[]toArray(Object[]a):把集合轉換成對象數(shù)組引用返回。但是類型和參數(shù)a的類型是相同的。booleanisEmpty():用于判斷集合是否為空。Iteratoriterator():用于返回實現(xiàn)Iterator接口的對象。Collection接口的子接口List
是Collection的子接口,它具有可以控制的順序,但并沒有定義或限制按什么排序。實現(xiàn)List接口的類是AbstractList,ArrayList,LinkedList,Vector。Set
不能包含重復的元素。它的實現(xiàn)類有AbstractSet,HashSet,LinkedHashSet,TreeSet。SortedSet是Set的子接口,在Set基礎上,要求其元素按照某種自然順序進行存儲。它的實現(xiàn)類有TreeSet。ArrayList我們可以將ArrayList看作是能夠自動增長容量的數(shù)組。利用ArrayList的toArray()返回一個數(shù)組。Arrays.asList()用于返回一個列表。迭代器(Iterator)給我們提供了一種通用的方式來遍歷集合中的元素。方法名說明booleanhasNext()判斷迭代器是否還存在下一個元素Objectnext()返回下一個元素的引用voidremove()從集合中刪除迭代器指向的最后一個元素返回的元素刪除的元素next()remove()next()Collections排序:Collections.sort()①自然排尋(naturalordering);②實現(xiàn)比較器(Comparator)接口。取最大/最小元素:Collections.max()、Collections.min()。在已排序的List中搜索指定的元素:Collectons.binarySearch()。LinkedList線性表:必存在唯一的稱為“第一個”和“最后一個”的數(shù)據(jù)元素;除第一個和最后一個元素外,每個元素都有且只有一個前驅元素,都有且只有一個后繼元素。線性表按其存儲結構可分為順序表和鏈表。LinkedList是采用雙向循環(huán)鏈表實現(xiàn)的。利用LinkedList實現(xiàn)棧(stack)、隊列(queue)、雙向隊列(double-endedqueue)。單向鏈表的結構datanextdatanextdatanext=nullhead節(jié)點單向鏈表的插入與刪除datanextdatanextdatanext=nullhead節(jié)點datanextdatanextdatanextdatanext=null循環(huán)鏈表的結構datanextdatanextdatanexthead節(jié)點雙向循環(huán)鏈表結構datanextdatanextdatanexthead節(jié)點previouspreviousprevious棧(Stack)棧(Stack)也是一種特殊的線性表,是一種后進先出(LIFO)的結構。棧是限定僅在表尾進行插入和刪除運算的線性表,表尾稱為棧頂(top),表頭稱為棧底(bottom)。棧的物理存儲可以用順序存儲結構,也可以用鏈式存儲結構。a1a2an…棧底棧頂出棧進棧隊列(Queue)隊列(Queue)是限定所有的插入只能在表的一端進行,而所有的刪除都在表的另一端進行的線性表。表中允許插入的一端稱為隊尾(Rear),允許刪除的一端稱為隊頭(Front)。隊列的操作是按先進先出(FIFO)的原則進行的。隊列的物理存儲可以用順序存儲結構,也可以用鏈式存儲結構。a1a2a3…an隊頭隊尾出隊入隊ArrayList和LinkedList的比較ArrayList底層采用數(shù)組完成,而LinkedList則是以雙向鏈表(double-linkedlist)完成,其內(nèi)每個對象除了數(shù)據(jù)本身外,還有兩個引用,分別指向前一個元素和后一個元素。如果我們經(jīng)常在List的開始處增加元素,或者在List中進行插入和刪除操作,我們應該使用LinkedList,否則的話,使用ArrayList將更加快速。就ArrayList與Vector主要從三方面來說:同步性:Vector是線程安全的,也就是說是同步的,而ArrayList是線程序不安全的,不是同步的。數(shù)據(jù)增長:當需要增長時,Vector默認增長為原來一倍,而ArrayList卻是原來的一半。ArrayList和Vector的比較HashSet實現(xiàn)Set接口,依靠HashMap來實現(xiàn)的。我們通常應該為要存放到散列表的各個對象重新定義hashCode()和equals()。散列表又稱為哈希表。散列表算法的基本思想是:以結點的關鍵字為自變量,通過一定的函數(shù)關系(散列函數(shù))計算出對應的函數(shù)值,以這個值作為該結點存儲在散列表中的地址。TreeSetTreeSet是依靠TreeMap來實現(xiàn)的。TreeSet是一個有序集合,TreeSet中元素將按照升序排列,缺省是按照自然順序進行排列,意味著TreeSet中元素要實現(xiàn)Comparable接口。我們可以在構造TreeSet對象時,傳遞實現(xiàn)了Comparator接口的比較器對象。HashSet和TreeSet的比較HashSet是基于Hash算法實現(xiàn)的,其性能通常都優(yōu)于TreeSet。我們通常都應該使用HashSet,在我們需要排序的功能時,我們才使用TreeSet。六大集合類接口之二——Map接口Map接口能夠將一個鍵(Key)影射到一個值(Value),不允許有重復的鍵,每個鍵之多有一個與之對應的值。Map的實現(xiàn)類有:Hashtable、HashMapSortedMap是Map的子接口,能使Key按照自然順序進行存儲。它的實現(xiàn)類有TreeMap接口為我們提供了完成下面三種主要的功能的方法Map改變:包括關鍵字/值對的刪除、更新和插入。Map查詢:允許用戶從Map中獲取關鍵字/值對。提供查詢Map元素內(nèi)容的方法,也有用來查詢整個Map對象的方法。Map接口的三種視圖keySet()方法獲取的是Map中的關鍵字的一個Set(唯一性)。因為map映射中的關鍵字是唯一,keySet()方法得到的正好是一個set。values()方法返回映射中值的Collection(Collection是允許存儲重復元素的對象的集合)。因為Map中的值是可以重復的,values()方法得到的只能是一個collection而不是一個Set。entrySet()方法返回Map.Entry的一個Set。即Map對象中所存儲的鍵值對的集合,也就是一個鍵值對構成的Set。HashMap和TreeMap的比較和Set類似,HashMap的速度通常都比TreeMap快,只有在需要排序的功能的時候,才使用TreeMap。就HashMap與HashTable主要從三方面來說:歷史原因:Hashtable是基于陳舊的Dictionary類的,HashMap是Java1.2引進的Map接口的一個實現(xiàn)同步性:Hashtable是線程安全的,也就是說是同步的,而HashMap是線程序不安全的,不是同步的值:只有HashMap可以讓你將空值作為一個表的條目的key或value
HashMap和Hashtable的比較六大集合類接口之三——Enumeration接口Enumeration接口是一個對集合類進行遍歷的接口。Enumeration接口提供的方法:booleanhasMoreElements():檢索是否有下一個對象,如果有則返回ture;否則返回false。ObjectnextElement():在上一個方法為true的條件下,返回下一個Object類型的對象;如果上一個方法返回的結果為false,那么還調(diào)用此方法時會產(chǎn)生一個NoSuchElementException。六大集合類接口之四——Iteraor接口Iteraor接口提供了以下的方法:hasNext():下一個對象存在返回ture;否則返回false。next():hasNext()為true時調(diào)用,返回Object類型的對象。remove():在提供迭代器實現(xiàn)對象的集合中刪除由next()方法指向的一個對象。Iteraor接口的優(yōu)點:Iterator是用于遍歷集合類的標準訪問方法。每種集合類返回的Iterator對象類型可能不同,Array可能返回ArrayIterator,Set可能返回SetIterator,但是它們都實現(xiàn)了Iterator接口,因此用戶不需直接和集合類打交道。六大接口之五——ListIterator接口ListIterator是Iterator的子接口。它對集合遍歷時進行的更改,將直接影響原來的集合。對List來說,也可以通過listIterator()取得其迭代器。Iterator和ListIterator主要區(qū)別在以下方面:ListIterator和Iterator都有hasNext()和next()方法,可以實現(xiàn)順序向后遍歷,但是ListIterator有hasPrevious()和previous()方法,可以實現(xiàn)逆向(順序向前)遍歷。ListIterator有add()方法,可向List中添加對象。ListIterator可以定位當前的索引位置,nextIndex()和previousIndex()可以實現(xiàn),Iterator沒有此功能。都可實現(xiàn)刪除對象,但是ListIterator可以實現(xiàn)對象的修改,此功能通過set()方法來實現(xiàn)。集合接口在使用時的注意事項Enumeration接口的nextElement方法和Iteraor接口的next()方法返回的對象用Object進行引用,在實際使用中,應根據(jù)對象的具體類型進行顯式的轉化(注意,要轉化成X類,條件是集合中所引用的對象原來就是X類型,或是X類型的子類,否則會產(chǎn)生類型轉化異常)。一些集合對象,例如Hashtable、HashMap,它的鍵和其值的加入順序,與Iteraor遍歷順序,并不一定一致。六大接口之六——Comparator接口Comparator是一個集合對象排序接口,某個類實現(xiàn)了這個接口,那么這個類的對象就可以進行排序,接口方法如下:
publicinterfaceComparator{
int
compare(Objecto1,Objecto2);
boolean
equals(Object
obj);}一般都只需要實現(xiàn)compare方法就行了,因為類都是默認從Object繼承,可使用Object的equals()方法。兩個特殊的集合類
StringTokenizer類StringTokenizer是以token為單元的字符串集合,它實現(xiàn)Enumeration接口,對其集合進行遍歷采用Enumeration提供的方法,當然也可采用它自己的方法,例如:
StringTokenizer
st=newStringTokenizer("thisisatest"); while(st.hasMoreTokens()){System.out.println(st.nextToken());}默認情況下,StringTokenizer用空格、制表符“\t”、回車符、換行符、分頁符為標志進行token區(qū)分。其他的構造方法:publicStringTokenizer(String
str,String
delim)publicStringTokenizer(String
str,String
delim,boole
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 景觀效果工程合同范本
- 出售狗狗質保合同范本
- 未來五年大葉檀棋盤企業(yè)數(shù)字化轉型與智慧升級戰(zhàn)略分析研究報告
- 未來五年往復式給料機行業(yè)跨境出海戰(zhàn)略分析研究報告
- 大數(shù)據(jù)與人工智能導論 課件 第8章人工智能初探
- 2025福建安溪中國茶都集團有限公司公開招聘工作人員6人筆試參考題庫附帶答案詳解(3卷)
- 2025年黑龍江交易集團秋季公開招聘73人筆試參考題庫附帶答案詳解(3卷)
- 2025年安徽馬鞍山市公共交通集團有限責任公司招聘25人筆試參考題庫附帶答案詳解(3卷)
- 2025年中國中醫(yī)藥出版社招聘筆試參考題庫附帶答案詳解(3卷)
- 2025中國電信廣西公司校園招聘火熱進行中筆試參考題庫附帶答案詳解(3卷)
- 期末綜合測試卷一(試卷)2025-2026學年二年級語文上冊(統(tǒng)編版)
- 2025年大學康復治療學(運動療法學)試題及答案
- 胎膜早破的診斷與處理指南
- 進出口貨物報關單的填制教案
- 被壓迫者的教育學
- 2025年科研倫理與學術規(guī)范期末考試試題及參考答案
- 上市公司財務舞弊問題研究-以國美通訊為例
- 2025年國家開放電大行管本科《公共政策概論》期末考試試題及答案
- 2024年廣東省春季高考(學考)語文真題(試題+解析)
- 四川省教育考試院2025年公開招聘編外聘用人員筆試考試參考試題及答案解析
- 超市商品陳列學習培訓
評論
0/150
提交評論