第十二章集合與泛型_第1页
第十二章集合與泛型_第2页
第十二章集合與泛型_第3页
第十二章集合與泛型_第4页
第十二章集合與泛型_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第12章集合與泛型12-1集合與陣列的比較12-2Collection介面與Collections類別12-3泛型12-4各種集合的特色12-5Map的功能與架構第12章集合與泛型-212-1集合與陣列的比較集合陣列空間大小不必指定集合大小。無論將元素存入或移除,集合都會動態調整空間以符合需求。必須指定陣列大小,之後無法改變。元素存取時,不可超過索引上限。資料類型可存放物件,放入的物件會自動轉型成Object類型,搭配泛型功能就可限制元素的資料類型。可存放物件或基本類型,但必須符合陣列的資料類型。資料存取要將元素取出,可使用:for-each。Iterator物件功能。要將元素取出,可使用:for迴圈並搭配索引。for-each。第12章集合與泛型-312-2Collection介面與Collections類別java.util.Collection介面是整個集合架構的根介面。第12章集合與泛型-4輸出結果元素總數:3集合內容:1trueJava移除1個元素之後...集合內容:1Java集合是否被清空?true範例說明第5~7行:將物件一一加入集合內,而基本類型都會先AutoBoxing成對應的物件型後才加入。第8行:取得元素總數。第10行:取出時的類型是Object。第13行:移除「true」元素。第16~20行:取得Iterator物件後,可透過該物件走訪所有集合的元素。第21行:清空集合內容物。第22行:檢查集合是不是空的容器。第12章集合與泛型-5Collections類別java.util.Collections類別提供許多與集合相關的static方法,例如排序與搜尋。注意執行排序時:(1)元素資料類型必須一致(2)元素不可為null值。執行搜尋時:必須先排序。第12章集合與泛型-6輸出結果元素升冪排序後:[AA,Aa,a,aa]「aa」的索引:3元素反轉後:[aa,a,Aa,AA]範例說明第9行:Collections只能幫List集合排序。第12行:排序完畢後方能呼叫binarySearch()方法。搜尋到"aa"值後回傳所在索引。第14行:reverse()方法會將元素順序反轉。第12章集合與泛型-712-3泛型1個屬性往往不止於1種資料類型,例如之前的Book類別,其price屬性就有可能是整數、小數或是文字類型;這樣一來,程式會變成複雜難懂。要解決這種問題,泛型(Generics)是最佳選擇。classBook{//定價有整數、小數、文字等3種資料類型

Integerprice1;Doubleprice2;Stringprice3;}第12章集合與泛型-8輸出結果書籍定價為:580書籍定價為:五百八十書籍定價為:580.0範例說明第2行:price屬性設為T類型。第12行:將T指定為Integer類型。第21~23行:如果宣告時不指定T的類型,那就是什麼類型都接受,所以會取得Object類型的值。第12章集合與泛型-9注意前範例第21行沒有指定T的類型,編譯會跳出警示訊息:Note:C:\Example\ch12\Generics.javausesuncheckedorunsafeoperations.Note:Recompilewith-Xlint:uncheckedfordetails.中文說明如下:注意:Generics.java檔案使用到未檢查或不安全的操作。注意:重新編譯並加上「-Xlint」參數就可以查看詳情。第12章集合與泛型-10泛型的進階設定泛型的設定也可以使用「?」搭配「extends」或「super」來增加設定上的彈性。第12章集合與泛型-11輸出結果書籍定價為:580範例說明第3行:T的類型可以是Number或其子類別。第10行:指定T的類型是Integer。第12行:book物件其泛型T的設定是Integer,符合第3行規定,所以可以呼叫第3行的show()方法。第12章集合與泛型-12泛型應用在集合上集合搭配泛型就可限制元素的資料類型;而且元素取出後也會與當初限制的資料類型相同。第12章集合與泛型-13輸出結果總和=6範例說明第12、16行:限制元素為Integer類型,第16行不可加入String物件。第17行:集合c的泛型設定是Integer,符合第3行規定。第5行:集合c的元素是Integer物件,取出之後可以直接指派給i。第6行:i會先AutoUnboxing,然後與sum相加。第12章集合與泛型-1412-4各種集合的特色Set集合Set集合有2個特色,而HashSet是Set集合的子類別,所以有相同特色:1.元素值不重複。2.元素無順序性。第12章集合與泛型-15輸出結果是否新增成功?false[SCWCD,SCJP]範例說明第7行:第5行已加入了"SCJP",所以無法再加入一次。第12章集合與泛型-16equals()、hashCode()方法的改寫Object類別定義了equals()方法,子類別需改寫此方法以判斷2個物件是否值相同;如果不改寫則一律回傳false。equals()方法屬於精準比對,所以執行效能較差;為了提升比對速度,還要改寫Object類別的hashCode()方法。Set集合要新增元素時,會自動執行下列步驟:呼叫hashCode():得到的整數值不同,直接認定這2個物件值不同,而不再呼叫equals()來比對。呼叫equals():如果得到false,代表值不同。第12章集合與泛型-17同一個執行階段,相同物件呼叫hashCode()方法所得的值一定相同。如果2個物件equals()方法比對後得到true,則呼叫hashCode()方法所得的值也必須相同。如果2個物件使用equals()方法比對後得到false的結果,則呼叫hashCode()方法所得的值最好不同,這樣有助於提升執行效能。改寫hashCode()方法規則有3項,第1、2項一定要遵從,第3項規則可以不遵從,但若遵從則可提升效能。第12章集合與泛型-18接續…第12章集合與泛型-19輸出結果書籍資訊如下:--------------------Java程式設計580.0--------------------SCJP認證手冊600.0--------------------範例說明第9行:改寫equals()方法。第10行:如果成立就代表相同實體,其值必定相同。第12行:要比較的物件為null或不屬於Book類別,直接回傳false。第14行:要比較屬性值,就需要將obj物件轉成Book物件,方能比較。第18行:改寫Object類別的hashCode()方法。第12章集合與泛型-20SortedSet集合SortedSet集合有2個特色,而TreeSet是SortedSet集合的子類別,所以有相同特色:1.元素值不重複。2.元素有排序性。第12章集合與泛型-21Comparable介面要讓物件加入至SortedSet集合內之後有排序性,該物件所屬類別必須實作Comparable介面的compareTo()方法。假設SortedSet集合內已有1個物件o1,並準備新增另一個物件o2,會自動執行「pareTo(o2);」,有3種回傳值:1.正整數:代表「o1>o2」,則o2會排在o1之前。2.負整數:代表「o1<o2」,則o1會排在o2之前。3.零:代表「o1=o2」,因為元素值不重複,o2無法成功加入。第12章集合與泛型-22接續…第12章集合與泛型-23輸出結果書籍資訊如下:--------------------VB2008程式設計450.0--------------------Java程式設計580.0--------------------SCJP認證手冊600.0--------------------範例說明第9行:實作Comparable介面的compareTo()方法。第10行:將price屬性設定成排序的依據。第12章集合與泛型-24子集檢視TreeSet實作NavigableSet介面,所以具有子集檢視(SubSet)的功能。所謂子集檢視,就是以TreeSet集合建立1個局部映射的子集合。當原集合內容更動時,子集合內容也會一併更動。第12章集合與泛型-25輸出結果[1,3,5,7,9][1,3][1,2,3,5,7,9][1,2,3]範例說明第8行:設定ts集合的子集檢視,限定元素值在1(含)~3(含)之間。第10行:ts增加的元素在子集檢視範圍內,所以在子集檢視中可以看到該元素。第12行:subSet欲增加4,超過當初限定的範圍,會產生執行錯誤。第12章集合與泛型-26List集合List集合可使用索引來存取元素,有2個特色,而ArrayList、LinkedList都是List集合的子類別,所以有相同特色:1.元素有順序性。使用索引。元素值可重複第12章集合與泛型-27輸出結果SCWCD認證手冊SCJP認證手冊VB2008程式設計範例說明第7行:將物件插入索引為2的位置上。第8行:用"SCWCD認證手冊"取代索引為0的元素。第12章集合與泛型-28Queue集合Queue(佇列)集合元素存取的方式是先進先出(FIFO)。一般建議使用專屬的offer()和poll()方法,以避免產生不必要的例外事件,而造成元素存取中斷。PriorityQueue和LinkedList是其子類別:

PriorityQueue:元素會先做升冪排序。

LinkedList:元素加入的順序決定了存取的順序。第12章集合與泛型-29輸出結果PriorityQueue:CCNALPICSCJP--------------------LinkedList:LPICSCJPCCNA範例說明第5~7行:將加入元素升冪排序。第10行:取得第一順位的元素值,但不會移除該元素。第11行:取得第一順位的元素值,並同時移除該元素。第12章集合與泛型-3012-5Map的功能與架構Map的「鍵」(Key)如同索引的功能,不過最大特色就是可以自訂其值。Map一次放2個物件,1個是鍵,另1個則是對應的「值」(Value),這2個物件合起來就稱作「鍵值組」(Key-ValuePair)。第12章集合與泛型-31HashMapHashMap是Map的子類別,其特色如下:1.鍵不重複。2.鍵無順序性。第12章集合與泛型-32輸出結果map:{SCJP=600,CCNA=600,Java=450}map:{SCJP=600,Java=450}keys:[SCJP,Java]values:[600,450]map是否被清空?true範例說明第6、8行:"Java"鍵會對應到新值450。第15行:將鍵轉存成Set集合。第17行:將值轉存成C

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论