SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Report
Justin Lin
Follow
Technology / Community Evangelist at Free lancer
Feb. 17, 2013
•
0 likes
•
2,547 views
1
of
68
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Feb. 17, 2013
•
0 likes
•
2,547 views
Download Now
Download to read offline
Report
Technology
Java SE 7 技術手冊
Justin Lin
Follow
Technology / Community Evangelist at Free lancer
Recommended
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Justin Lin
2.1K views
•
100 slides
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Justin Lin
5.3K views
•
66 slides
Java SE 7 技術手冊投影片第 15 章 - 反射器與類別載入器
Justin Lin
1.9K views
•
48 slides
Java SE 8 技術手冊第 17 章 - 反射與類別載入器
Justin Lin
2.3K views
•
50 slides
Java SE 7 技術手冊投影片第 02 章 - 從JDK到IDE
Justin Lin
3.6K views
•
66 slides
Java SE 7 技術手冊投影片第 12 章 - 通用API
Justin Lin
2.2K views
•
126 slides
More Related Content
What's hot
Java SE 8 技術手冊第 9 章 - Collection與Map
Justin Lin
4.9K views
•
81 slides
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
4.2K views
•
91 slides
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Justin Lin
3.1K views
•
129 slides
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Justin Lin
3.2K views
•
91 slides
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Justin Lin
2.2K views
•
48 slides
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Justin Lin
5.6K views
•
66 slides
What's hot
(20)
Java SE 8 技術手冊第 9 章 - Collection與Map
Justin Lin
•
4.9K views
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
•
4.2K views
Java SE 7 技術手冊投影片第 11 章 - 執行緒與並行API
Justin Lin
•
3.1K views
Java SE 7 技術手冊投影片第 04 章 - 認識物件
Justin Lin
•
3.2K views
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Justin Lin
•
2.2K views
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Justin Lin
•
5.6K views
Java SE 8 技術手冊第 15 章 - 通用API
Justin Lin
•
2.2K views
資料結構
Justin Lin
•
1.8K views
Java SE 7 技術手冊投影片第 16 章 - 自訂泛型、列舉與標註
Justin Lin
•
2.2K views
Java SE 8 技術手冊第 16 章 - 整合資料庫
Justin Lin
•
2.9K views
Java SE 8 技術手冊第 10 章 - 輸入輸出
Justin Lin
•
2.6K views
CH17:反射與類別載入器
Justin Lin
•
280 views
Java SE 7 技術手冊投影片第 06 章 - 繼承與多型
Justin Lin
•
2.5K views
CH16:整合資料庫
Justin Lin
•
355 views
Java SE 8 技術手冊第 18 章 - 自訂泛型、列舉與標註
Justin Lin
•
2.8K views
CH04:認識物件
Justin Lin
•
421 views
CH09:Collection與Map
Justin Lin
•
286 views
Java SE 8 技術手冊第 1 章 - Java平台概論
Justin Lin
•
11.6K views
從模組到類別
Justin Lin
•
1.7K views
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Justin Lin
•
3.7K views
Viewers also liked
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
Justin Lin
2.4K views
•
63 slides
Java SE 7 技術手冊投影片第 08 章 - 例外處理
Justin Lin
2.4K views
•
56 slides
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Justin Lin
2.1K views
•
66 slides
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Justin Lin
5.9K views
•
43 slides
Joda-Time & JSR 310 – Problems, Concepts and Approaches
Justin Lin
6.8K views
•
66 slides
Java SE 7 技術手冊第七章草稿 - 何謂介面?
Justin Lin
3.6K views
•
15 slides
Viewers also liked
(16)
Java SE 7 技術手冊投影片第 13 章 - 視窗程式設計
Justin Lin
•
2.4K views
Java SE 7 技術手冊投影片第 08 章 - 例外處理
Justin Lin
•
2.4K views
Java SE 7 技術手冊投影片第 07 章 - 介面與多型
Justin Lin
•
2.1K views
Java SE 7 技術手冊投影片第 01 章 - Java平台概論
Justin Lin
•
5.9K views
Joda-Time & JSR 310 – Problems, Concepts and Approaches
Justin Lin
•
6.8K views
Java SE 7 技術手冊第七章草稿 - 何謂介面?
Justin Lin
•
3.6K views
Java SE 7 技術手冊第六章草稿 - 何謂繼承?
Justin Lin
•
3.6K views
Java SE 8 技術手冊第 8 章 - 例外處理
Justin Lin
•
3.2K views
淺談 Groovy 與 Gradle
Justin Lin
•
8.4K views
Java SE 7 技術手冊投影片第 03 章 - 基礎語法
Justin Lin
•
3.5K views
Java SE 7 技術手冊第五章草稿 - 何謂封裝?
Justin Lin
•
4.6K views
Java SE 7 技術手冊 - 課後練習解答
Justin Lin
•
6.6K views
Servlet & JSP 教學手冊第二版 - 課後練習解答
Justin Lin
•
4.9K views
Spring 2.0 技術手冊目錄
Justin Lin
•
2.4K views
Java SE 8 技術手冊第 6 章 - 繼承與多型
Justin Lin
•
3.5K views
Java 8 與 retrolambda
Justin Lin
•
5K views
Similar to Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Collection與Map
Justin Lin
576 views
•
100 slides
9. 資料結構
Justin Lin
285 views
•
73 slides
8. 常用標準API
Justin Lin
573 views
•
105 slides
Java_06:Collection
Brad Chao
279 views
•
21 slides
Java相关基础知识
yiditushe
307 views
•
26 slides
[圣思园][Java SE]Reflection
ArBing Xie
545 views
•
33 slides
Similar to Java SE 7 技術手冊投影片第 09 章 - Collection與Map
(20)
Collection與Map
Justin Lin
•
576 views
9. 資料結構
Justin Lin
•
285 views
8. 常用標準API
Justin Lin
•
573 views
Java_06:Collection
Brad Chao
•
279 views
Java相关基础知识
yiditushe
•
307 views
[圣思园][Java SE]Reflection
ArBing Xie
•
545 views
Ch07 使用 JSTL
Justin Lin
•
155 views
資料結構
Justin Lin
•
441 views
Java面试笔试题大汇总
yiditushe
•
411 views
第08章 查找(java版)
Yan Li
•
387 views
My scala learning note for TWJUG
Ian Tsai
•
1.3K views
[圣思园][Java SE]Java se lesson 3
ArBing Xie
•
245 views
認識物件
Justin Lin
•
1.1K views
使用 Eloquent ORM
Shengyou Fan
•
11.4K views
4. 使用物件
Justin Lin
•
174 views
[圣思园][Java SE]Java se lesson 1
ArBing Xie
•
130 views
[圣思园][Java SE]Java se lesson 1
ArBing Xie
•
130 views
Power shell – object 篇
LearningTech
•
316 views
Java面试题集
yiditushe
•
407 views
第09章 排序(java版)
Yan Li
•
364 views
More from Justin Lin
Ch14 簡介 Spring Boot
Justin Lin
861 views
•
22 slides
Ch13 整合 Spring MVC/Security
Justin Lin
279 views
•
58 slides
Ch12 Spring 起步走
Justin Lin
266 views
•
31 slides
Ch11 簡介 JavaMail
Justin Lin
155 views
•
8 slides
Ch10 Web 容器安全管理
Justin Lin
152 views
•
30 slides
Ch09 整合資料庫
Justin Lin
230 views
•
92 slides
More from Justin Lin
(20)
Ch14 簡介 Spring Boot
Justin Lin
•
861 views
Ch13 整合 Spring MVC/Security
Justin Lin
•
279 views
Ch12 Spring 起步走
Justin Lin
•
266 views
Ch11 簡介 JavaMail
Justin Lin
•
155 views
Ch10 Web 容器安全管理
Justin Lin
•
152 views
Ch09 整合資料庫
Justin Lin
•
230 views
Ch08 自訂標籤
Justin Lin
•
131 views
Ch06 使用 JSP
Justin Lin
•
246 views
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
•
200 views
Ch04 會話管理
Justin Lin
•
235 views
Ch03 請求與回應
Justin Lin
•
231 views
Ch02 撰寫與設定 Servlet
Justin Lin
•
337 views
CH1. 簡介 Web 應用程式
Justin Lin
•
1.1K views
14. 進階主題
Justin Lin
•
401 views
13.並行、平行與非同步
Justin Lin
•
234 views
12. 除錯、測試與效能
Justin Lin
•
148 views
11. 常用內建模組
Justin Lin
•
140 views
10. 資料永續與交換
Justin Lin
•
148 views
8. open() 與 io 模組
Justin Lin
•
243 views
7. 例外處理
Justin Lin
•
114 views
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
2.
CHAPTER 9 • Collection與Map
學習目標 • 認識Collection與Map 架構 • 使用Collection與Map 實作物件 • 對收集之物件進行排序 • 簡介泛型語法
3.
認識Collection架構
4.
認識Collection架構 • 如果想要收集時具有索引順序,實作方式之
一就是使用陣列,而以陣列實作List的就是 java.util.ArrayList
5.
認識Collection架構 • 有時為了只表示我們感興趣的介面或類別,
會簡化繼承與實作架構圖
6.
具有索引的List • List是一種Collection,作用是收集物件,
並以索引方式保留收集的物件順序 • 實作類別之一是java.util.ArrayList, 其實作原理大致如6.2.5的ArrayList範例
8.
具有索引的List • java.util.LinkedList也實作了List介
面,你可以將上面的範例中ArrayList換為 LinkedList,而結果不變 • 那麼什麼時候該用ArrayList?何時該用 LinkedList呢?
9.
具有索引的List • 陣列在記憶體中會是連續的線性空間,根據
索引隨機存取時速度快 • 如果操作上有這類需求時,像是排序,就可 使用ArrayList,可得到較好的速度表現 • 如果需要調整索引順序時,會有較差的表現 • 陣列的長度固定也是要考量的問題,為此, ArrayList有個可指定容量(Capacity)的 建構式
10.
具有索引的List • LinkedList在實作List介面時,採用了鏈
結(Link)結構
13.
具有索引的List • 在SimpleLinkedList內部使用Node封裝
新增的物件,每次add()新增物件之後, 將會形成以下的鏈狀結構
14.
具有索引的List • 想要指定索引隨機存取物件時,鏈結方式都
得使用從第一個元素開始查找下一個元素的 方式,會比較沒有效率,像排序就不適合使 用鏈結實作 • 鏈結的每個元素會參考下一個元素,這有利 於調整索引順序
15.
具有索引的List
16.
內容不重複的Set • 若有一個字串,當中有許多的英文單字,你
希望知道不重複的單字有幾個:
17.
內容不重複的Set
18.
內容不重複的Set • 你並沒有告訴Set,什麼樣的Student實例
才算是重複… • 以HashSet為例,會使用物件的 hashCode()與equals()來判斷物件是否 相同
19.
內容不重複的Set
20.
內容不重複的Set
21.
內容不重複的Set • Java中許多要判斷物件是否重複時,都會呼
叫hashCode()與equals()方法 • 規格書中建議,兩個方法必須同時實作
22.
內容不重複的Set
23.
支援佇列操作的Queue • Queue繼承自Collection,所以也具有
Collection的add()、remove()、 element()等方法 – 操作失敗時會拋出例外 • Queue定義了自己的offer()、poll()與 peek()等方法 – 操作失敗時會傳回特定值
24.
支援佇列操作的Queue • offer()方法用來在佇列後端加入物件,成
功會傳回true,失敗則傳回false • poll()方法用來取出佇列前端物件,若佇列 為空則傳回null • peek()用來取得(但不取出)佇列前端物件, 若佇列為空則傳回null
25.
支援佇列操作的Queue • LinkedList不僅實作了List介面,也實作
了Queue的行為
27.
支援佇列操作的Queue • 想對佇列的前端與尾端進行操作,在前端加入物件
與取出物件,在尾端加入物件與取出物件,Queue 的子介面Deque就定義了這類行為 • addFirst()、removeFirst()、getFirst()、 addLast()、removeLast()、getLast()等方 法,操作失敗時會拋出例外 • offerFirst()、pollFirst()、peekFirst()、 offerLast()、pollLast()、peekLast()等 方法,操作失敗時會傳回特定值
28.
支援佇列操作的Queue
30.
走訪物件的Iterator • 如果要你寫個forEach()方法,可以顯示
List收集的所有物件,也許你會這麼寫:
31.
走訪物件的Iterator • 如果要讓你寫個forEach()方法顯示Set收
集的所有物件,你該怎麼寫呢?
32.
走訪物件的Iterator • 如果現在要讓你再實作一個forEach()方法,
可以顯示Queue收集的所有物件,也許你會 這麼寫:
33.
走訪物件的Iterator • 無論是List、Set或Queue,都會有個
iterator()方法 – 在JDK1.4之前,是定義在Collection介面中 – 在JDK5之後,原先定義在Collection中的 iterator()方法,提昇至新的 java.util.Iterable父介面
34.
走訪物件的Iterator • iterator()方法會傳回
java.util.Iterator介面的實作物件 – 可以使用Iterator的hasNext()看看有無下一 個物件,若有的話,再使用next()取得下一個 物件
35.
走訪物件的Iterator • 在JDK5之後,你可以使用以下的forEach()
方法顯示收集的所有物件:
36.
走訪物件的Iterator • 在JDK5之後有了增強式for迴圈 –
運用在陣列上 – 運用在實作Iterable介面的物件上
37.
走訪物件的Iterator • 增強式for迴圈是編譯器蜜糖,當運用在
Iterable物件時,會展開為:
38.
排序收集的物件 • java.util.Collections提供有sort()
方法,由於必須有索引才能進行排序,因此 Collections的sort()方法接受List實 作物件
40.
排序收集的物件 • Collections的sort()方法要求被排序的
物件,必須實作java.lang.Comparable 介面
41.
排序收集的物件
42.
排序收集的物件 • 為何先前的Sort類別中,可以直接對
Integer進行排序呢?
43.
排序收集的物件 • 如果你的物件無法實作Comparable呢?
44.
排序收集的物件 • Collections的sort()方法有另一個重載
版本,可接受java.util.Comparator介 面的實作物件
45.
排序收集的物件 • 如果想針對陣列進行排序,可以使用
java.util.Arrays的sort()方法 – 該方法針對物件排序時有兩個版本,一個是你收 集在陣列中的物件必須是Comparable(否則會 拋出ClassCastException),另一個版本則 可以傳入Comparator指定排序方式
46.
使用泛型 • 在使用Collection收集物件時,由於事先
不知道被收集物件之形態,因此內部實作時, 都是使用Object來參考被收集之物件 • 取回物件時也是以Object型態傳回,原理可 參考6.2.5自行實作的ArrayList,或9.1.2實 作的SimpleLinkedList
47.
使用泛型 • 若你想針對某類別定義的行為操作時,必須
告訴編譯器,讓物件重新扮演該型態 • 執行時期被收集的物件會失去形態資訊
48.
使用泛型 • 實際上通常Collection中會收集同一種類
型的物件 • 從JDK5之後,新增了泛型(Generics)語法, 讓你在設計API時可以指定類別或方法支援泛 型 • 使用API的客戶端在語法上會更為簡潔,並得 到編譯時期檢查
50.
使用泛型 • 使用泛型語法,會對設計API造成一些語法上
的麻煩,但對客戶端會多一些友善
51.
使用泛型 • 宣告與建立物件時,可使用角括號告知編譯
器,這個物件收集的都會是String,而取回 之後也會是String • 加入了不是String的東西會如何呢?
52.
使用泛型 • Java的Collection API都支援泛型語法,
若在API文件看到角括號,表示支援泛型語法
53.
使用泛型 • 以使用java.util.List為例: • 泛型語法有一部份是編譯器蜜糖(一部份是
記錄於位元碼中的資訊)
54.
使用泛型 • 以下會編譯錯誤:
55.
使用泛型 • 若介面支援泛型,在實作時也會比較方便,
例如:
56.
使用泛型 • 再來看一下以下程式片段: • 從JDK7之後有了點改善:
57.
常用Map實作類別
58.
常用Map實作類別
59.
常用Map實作類別 • HashMap中建立鍵值對應之後,鍵是無序的 • 如果想讓鍵是有序的,則可以使用TreeMap
– 鍵的部份將會排序,條件是作為鍵的物件必須實 作Comparable介面,或者是在建構TreeMap時 指定實作Comparator介面的物件
60.
常用Map實作類別
61.
常用Map實作類別 • Properties的setProperty()指定字串
型態的鍵值,getProperty()指定字串型 態的鍵,取回字串型態的值
62.
常用Map實作類別 • Properties也可以從檔案中讀取屬性
63.
常用Map實作類別 • 也可以使用loadFromXML()方法載入.xml
檔案
64.
常用Map實作類別 • 在使用java指令啟動JVM時,可以使用-D指
定系統屬性:
65.
常用Map實作類別 • System.getProperties()取回的
Properties實例中,包括了許多預置屬性
66.
走訪Map鍵值
67.
走訪Map鍵值 • 如果想同時取得Map的鍵與值,可以使用
entrySet()方法
68.
走訪Map鍵值 • 泛型語法用到某個程度時,老實說可讀性並
不好 …