SlideShare a Scribd company logo
Submit Search
Upload
Login
Signup
CH09:Collection與Map
Report
Justin Lin
Follow
Technology / Community Evangelist at Free lancer
Aug. 8, 2020
•
0 likes
•
286 views
1
of
87
CH09:Collection與Map
Aug. 8, 2020
•
0 likes
•
286 views
Download Now
Download to read offline
Report
Travel
認識Collection與Map架構 使用Collection與Map實作 對收集之物件進行排序 簡介Lambda表示式 簡介泛型語法
Justin Lin
Follow
Technology / Community Evangelist at Free lancer
Recommended
CH11:執行緒與並行API
Justin Lin
317 views
•
89 slides
CH12:Lambda
Justin Lin
376 views
•
110 slides
CH1:Java平台概論
Justin Lin
1.2K views
•
41 slides
CH03:基礎語法
Justin Lin
527 views
•
48 slides
CH04:認識物件
Justin Lin
421 views
•
87 slides
CH02:從JDK到IDE
Justin Lin
478 views
•
58 slides
More Related Content
What's hot
CH1. 簡介 Web 應用程式
Justin Lin
1.1K views
•
55 slides
Ch06 使用 JSP
Justin Lin
245 views
•
83 slides
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
200 views
•
69 slides
Ch09 整合資料庫
Justin Lin
230 views
•
92 slides
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Justin Lin
19.2K views
•
53 slides
Java SE 8 技術手冊第 9 章 - Collection與Map
Justin Lin
4.9K views
•
81 slides
What's hot
(20)
CH1. 簡介 Web 應用程式
Justin Lin
•
1.1K views
Ch06 使用 JSP
Justin Lin
•
245 views
Ch05 Servlet 進階 API、過濾器與傾聽器
Justin Lin
•
200 views
Ch09 整合資料庫
Justin Lin
•
230 views
Servlet & JSP 教學手冊第二版 - 第 1 章:簡介Web應用程式
Justin Lin
•
19.2K views
Java SE 8 技術手冊第 9 章 - Collection與Map
Justin Lin
•
4.9K views
Java SE 8 技術手冊第 3 章 - 基礎語法
Justin Lin
•
5.3K views
Java SE 8 技術手冊第 12 章 - Lambda
Justin Lin
•
4.4K views
Ch13 整合 Spring MVC/Security
Justin Lin
•
279 views
Ch04 會話管理
Justin Lin
•
235 views
Ch02 撰寫與設定 Servlet
Justin Lin
•
337 views
Ch03 請求與回應
Justin Lin
•
231 views
9. 資料結構
Justin Lin
•
285 views
淺談 Java GC 原理、調教和新發展
Leon Chen
•
12.2K views
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Justin Lin
•
5.3K views
初學者都該了解的 HTTP 通訊協定基礎
Will Huang
•
12.9K views
Ch09 整合資料庫
Justin Lin
•
467 views
Ch12 Spring 起步走
Justin Lin
•
266 views
Once Upon a Time...
MargaRenedo
•
335 views
Spring 2.0 技術手冊第七章 - Spring Web MVC 框架
Justin Lin
•
4.3K views
Similar to CH09:Collection與Map
Collection與Map
Justin Lin
576 views
•
100 slides
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Justin Lin
2.5K views
•
68 slides
關聯式資料庫系統的規劃
Simon Huang
7.5K views
•
33 slides
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Justin Lin
2.1K views
•
100 slides
搜索技术分享
endless_yy
1.2K views
•
50 slides
No sql
Department of Information Management Ming Chuan University, Taiwan
839 views
•
35 slides
Similar to CH09:Collection與Map
(17)
Collection與Map
Justin Lin
•
576 views
Java SE 7 技術手冊投影片第 09 章 - Collection與Map
Justin Lin
•
2.5K views
關聯式資料庫系統的規劃
Simon Huang
•
7.5K views
Java SE 7 技術手冊投影片第 14 章 - 整合資料庫
Justin Lin
•
2.1K views
搜索技术分享
endless_yy
•
1.2K views
No sql
Department of Information Management Ming Chuan University, Taiwan
•
839 views
喬叔 Elasticsearch Index 管理技巧與效能優化
Joe Wu
•
2.4K views
My scala learning note for TWJUG
Ian Tsai
•
1.3K views
4. 使用物件
Justin Lin
•
174 views
Java_06:Collection
Brad Chao
•
278 views
Elastic stack day-1
YI-CHING WU
•
1K views
開放原始碼 Ch2.4 app - oss - db (ver 1.0)
My own sweet home!
•
479 views
8. 常用標準API
Justin Lin
•
573 views
ElasticSearch Training#2 (advanced concepts)-ESCC#1
medcl
•
4.5K views
CH16:整合資料庫
Justin Lin
•
355 views
Java SE 8 技術手冊第 4 章 - 認識物件
Justin Lin
•
4.2K views
Json ld 簡介
bobo52310
•
6.2K views
More from Justin Lin
Ch14 簡介 Spring Boot
Justin Lin
861 views
•
22 slides
Ch11 簡介 JavaMail
Justin Lin
155 views
•
8 slides
Ch10 Web 容器安全管理
Justin Lin
152 views
•
30 slides
Ch08 自訂標籤
Justin Lin
131 views
•
54 slides
14. 進階主題
Justin Lin
401 views
•
86 slides
13.並行、平行與非同步
Justin Lin
234 views
•
81 slides
More from Justin Lin
(19)
Ch14 簡介 Spring Boot
Justin Lin
•
861 views
Ch11 簡介 JavaMail
Justin Lin
•
155 views
Ch10 Web 容器安全管理
Justin Lin
•
152 views
Ch08 自訂標籤
Justin Lin
•
131 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
6. 類別的繼承
Justin Lin
•
165 views
5. 從模組到類別
Justin Lin
•
166 views
4. 流程語法與函式
Justin Lin
•
187 views
3.型態與運算子
Justin Lin
•
196 views
1. Python起步走
Justin Lin
•
648 views
2. 從 REPL 到 IDE
Justin Lin
•
232 views
Python 3.9 技術手冊目錄
Justin Lin
•
570 views
CH19:深入模組化
Justin Lin
•
786 views
CH09:Collection與Map
1.
1
2.
Collection與Map 學習目標 • 認識Collection與Map架構 • 使用Collection與Map實作 •
對收集之物件進行排序 • 簡介Lambda表示式 • 簡介泛型語法 2
3.
認識Collection架構 3
4.
• 依需求使用不同的介面實作物件 4
5.
• 只表示感興趣的介面或類別 5
6.
具有索引的List 6
7.
7
8.
java.util.ArrayList • 使用Object陣列來保存收集之物件 • 使用索引隨機存取時速度快 •
若需要調整索引順序時,會有較差的表現 • 陣列長度固定也是要考量的問題 • 有個可指定容量(Capacity)的建構式 8
9.
LinkedList 9
10.
10
11.
11
12.
12
13.
• 每次add()物件時,才會建立新的Node來保 存物件,不會事先耗費記憶體 • 指定索引隨機存取物件時,會比較沒有效率 •
有利於調整索引順序 13
14.
內容不重複的Set 14
15.
• Set沒有將重複的學生資料排除 15
16.
• 你沒有告訴Set,什麼樣的Student實例才 算是重複 • 以HashSet為例 16
17.
17
18.
• 許多場合要判斷物件是否重複時,都會呼叫 hashCode()與equals()方法 • 因此規格書中建議,兩個方法要同時實作 18
19.
19
20.
支援佇列操作的Queue • 定義了offer()、poll()與peek()等方法 • 操作失敗時會傳回特定值 20
21.
21
22.
• Queue的子介面Deque 22
23.
23
24.
24
25.
使用泛型 25
26.
26
27.
• 對API設計者造成一些語法上的麻煩,但對客 戶端會多一些友善 27
28.
• Collection API支援泛型語法 •
沒有指定型態參數實際型態,程式碼中出現 型態參數的地方,就會回歸為使用Object 28
29.
• 有一部份是編譯器蜜糖 29
30.
• 以下會編譯錯誤: 30
31.
• 有個介面宣告若是如下: 31
32.
• 如果不指定T的實際型態,那麼T出現的位置 就回歸為使用Object 32
33.
• JDK7以後有了點改善 • Java
SE 10以後 33
34.
• 也可以只在方法上定義泛型 • 若能將elemOf()設計為泛型方法 34
35.
簡介Lambda表示式 • 匿名類別語法實作Request介面並建立實例 • 可以使用JDK8新增的Lambda表示式 35
36.
• 如果有個介面宣告如下: 36
37.
• 可以用泛型宣告的型態作為資訊來源 37
38.
• 從JDK9開始 • Java
SE 10 38
39.
• 使用Lambda語法來實作 39
40.
40
41.
• 不鼓勵使用Lambda表示式來寫複雜的演算 • 不過若流程較為複雜,可以使用區塊{}符號 包括演算流程 41
42.
Iterable與Iterator • 寫個forEach()方法,可以顯示List收集 的物件 42
43.
• 實作一個forEach()方法,可以顯示Queue 收集的物件 43
44.
• iterator()方法在JDK5出現前,是定義在 Collection介面 • JDK5以後提昇至java.lang.Iterable 44
45.
• 增強式for迴圈,運用在陣列、實作 Iterable介面的物件, 45
46.
• 增強式for迴圈是編譯器蜜糖 46
47.
• JDK8以後的版本,Iterable新增了 forEach()方法 47
48.
Comparable與Comparator 48
49.
49
50.
• 將var改為List,雖然可以通過編譯,然而 執行時會拋出ClassCastException? 50
51.
實作Comparable 51
52.
• Integer實作了Comparable介面: 52
53.
實作Comparator • String本身有實作Comparable 53
54.
• Collections的sort()方法有另一個重載 版本,可接受java.util.Comparator 54
55.
• java.util.TreeSet • java.util.PriorityQueue 55
56.
• 可以使用Lambda語法讓它更簡潔一些: • JDK8也在List增加了sort()方法 56
57.
• 若有個List某些索引處包括null,現在打 算讓null排在最前頭,之後依字串長度由大 到小排序,那會怎麼寫? 57
58.
58
59.
• JDK8以後 59
60.
常用Map實作類別 • 根據某鍵(Key)來取得對應的值(Value) 60
61.
使用HashMap 61
62.
使用TreeMap • 鍵的部份會排序,條件是作為鍵的物件必須 實作Comparable介面 • 或是建構TreeMap時,指定實作 Comparator介面的物件 62
63.
63
64.
使用Properties • 繼承HashTable,HashTable實作了Map 64
65.
• 從檔案中讀取屬性 65
66.
• 也可以使用loadFromXML()方法 66
67.
• 使用java指令啟動JVM時,可以使用-D指 定系統屬性 67
68.
68
69.
走訪Map鍵值 69
70.
70
71.
71
72.
淺談不可變特性 • 在純函數式語言中(像是Haskell),x =
1 • x就是1,1的名稱(而不是變數)就是x,不 會再是其他的東西 • 在Java中想使用變數來模仿不可變特性,通 常會把變數加上final修飾 72
73.
副作用(Side effect) • 具有副作用的方法會改變物件狀態 –
Collections的sort() – List本身的add()方法 • 程式語言本身有變數的概念,在撰寫時就容 易調整變數值,也就容易調整物件狀態,也 就易於變更整個系統狀態 73
74.
• 副作用是個雙面刃 • 在一個設計不良的系統中,若沒有適當地控 管副作用,追蹤物件狀態會越來越困難 •
如果變數不可變,設計出來的方法就不會有 副作用,物件狀態也不可變 74
75.
• 不可變物件(Immutable object)有許多好處 –
並行(Concurrent)程式設計時,不用擔心執行 緒共用競爭的問題 – 共用資料結構,達到節省時間及空間之目的 75
76.
• Java畢竟不是以函數式為主要典範 • 看看Collection介面就知道了 –
有些方法操作都是選用的 – 若不打算提供實作的方法,可以丟出 UnsupportedOperationException – 實作物件必須在文件上指明,支援哪些操作 76
77.
• 有時在設計上,為了限制副作用的發生,會 希望某些物件具有不可變的特性 • 以便易於掌握物件狀態,從而易於掌握系統 某些部份的狀態 77
78.
• 在JDK8以前,會透過Collections的 static方法: – unmodifiableCollection() –
unmodifiableList() – unmodifiableSet() – unmodifiableMap() • 取得一個無法修改的(unmodifiable)物件 • JDK9以後在List、Set、Map提供了of() 方法,用以建立不可變的List、Set或Map 實作物件 78
79.
unmodifiableXXX()方法 79
80.
• 傳回的物件只是無法修改(Unmodifiable) ,也就是僅僅不支援修改操作罷了 • 傳回的物件是不可修改,而非不可變動 80
81.
List、Set、Map的of()方法 81
82.
• 會建立不可變物件,不能對它們呼叫有副作 用的方法,否則會拋出 UnsupportedOperationException 82
83.
83
84.
• 不會參考至原elements參考之陣列 84
85.
• 元素是淺層複製 85
86.
• 如果想要更進一步的不可變特性,應該令 Student類別在定義時也支援不可變特性 86
87.
• Arrays.asList()方法 87