發表於2024-11-24
√ Scala集閤庫不可多得的中文資料
√ 作為Scala的製勝法寶本書教你如何駕馭
√ 麵嚮實際問題用示例代碼講解類的使用和原理
√ 全新角度實現基本數據結構是提升功力的不二法門
《Scala 集閤技術手冊》是一本全麵介紹 Scala 集閤框架的圖書,它基於新的 Scala 2.11 編寫,深入全麵地介紹瞭 Scala 集閤框架的集閤類和方法,通過圖例、代碼示例、錶格等多種 方式多方位地介紹集閤類的方法和實現,並且對相關的類型的性能進行分析和比較,總結瞭 各個集閤類的特點,幫助讀者快速地掌握 Scala 集閤框架,並且可以作為日常 Scala 開發的參 考書。 《Scala 集閤技術手冊》適閤架構師、軟件開發工程師、測試人員以及其他對 Scala 集閤感興趣的相關人員閱讀。
晁嶽攀,2013.8 ? ThisTech 項目經理 專注於視頻廣告插入技術2007.10 ? 2013.7 Motorola 高級軟件工程師、項目經理 主要為美國*大的電視運行商Comcast, Time Warner,法國電信, 江蘇有綫,北京歌華等做有綫電視的視頻點播等2003 ? 2007 清華同方 開發清華同方ezONE開發平颱以及相關的中間件技術2000 ? 2003 北京方菱 公安係統相關軟件的研發
推薦序 iii
序 iv
第 1 章 Scala 集閤庫簡介 1
Scala 編程語言 1
Scala 集閤 2
誰應該閱讀此書 7
為什麼寫這本書 7
印刷體變化 7
內容概要 8
第 2 章 Traversable 9
初始化 Traversable 對象 10
集閤的靜態類型和類型擦除 12
對 Traversable 實例中每個元素執行操作(foreach) 13
平展一個 Traversable 實例 14
轉置 Traversable 集閤(transpose) 17
unzip 一個 Traversable 18
連接兩個 Traversable 到一個新的 Traversable 19
連接多個 Traversable 對象到一個新的 Traversable 21
利用偏函數篩選元素 22
對所有的元素應用一個函數,並將結果放入一個新的 Traversable 對象中 23
利用 scan 計算 Traversable 元素的階乘 24
使用指定的函數摺疊 Traversable 的元素 26
判斷一個 Traversable 非空 28
得到 Traversable 對象的特定的元素 29
得到 Traversable 對象的尾部 30
選擇 Traversable 的一段子集 31
選取 Traversable 對象的前 N 個元素 32
跳過開頭的前 N 個元素,選擇剩餘的元素 33
根據條件篩選元素 34
給 Traversable 對象的元素分組 35
檢查 Traversable 對象中的元素是否滿足條件 37
統計滿足斷言的元素個數 37
歸約操作 38
在 Traversable 對象上調用聚閤函數 40
基於 Traversable 對象生成字符串 41
集閤類型轉換 42
復製元素到一個數組 44
返迴一個 Traversable 對象的視圖 view 45
得到 Traversable 對象的底層實現 46
使用一個相同的元素填充元素 46
在某個值域上生成指定間隔的隊列 47
tabulate 48
生成空的 Traversable 對象 48
得到 Traversable 對象的串行對象和並行對象 49
第 3 章 Iterable 51
將 Iterable 對象分組 53
以滑動窗口的方式分組 Iterable 對象 54
zip 兩個集閤 55
zipAll 兩個長度不同的集閤 56
使用本身的索引 zip 一個 Iterable 集閤 57
檢查兩個 Iterables 是否包含相同的元素 57
得到尾部的 N 個元素 58
去掉尾部的 N 個元素 59
第 4 章 Seq 60
得到序列的索引集閤 61
序列的長度 61
得到指定索引的元素 62
尋找指定元素的索引 63
尋找滿足條件的元素索引 64
尋找指定的子序列 64
尋找滿足條件的子序列的長度 65
增加元素到序列中 65
替換序列中的元素 66
更新指定位置的索引 66
排序 67
反轉一個序列 68
序列是否包含某個前綴或者後綴 69
序列是否包含某子序列 69
檢查兩個序列對應的元素是否滿足斷言 69
集閤操作 70
去掉重復的元素 71
得到元素的各種排列 72
得到序列的指定長度的元素的組閤 72
將序列進行轉換 73
偏函數的應用 74
IndexedSeq 和 LinearSeq 75
Range 和 NumericRange 76
Vector 77
第 5 章 Set 80
檢查 Set 集閤是否包含元素 82
增加一個元素或者一組元素到 Set 集閤中 82
從 Set 集閤中去掉一個元素或一組元素 83
二元 Set 集閤運算 84
更新一個可變 Set 集閤的元素 85
剋隆 Set 集閤 86
SortedSet 86
BitSet 88
HashSet 90
ListSet 91
LinkedHashSet 92
第 6 章 Map 94
初始化 94
根據鍵值查找值 95
包含 96
增加新的鍵值對 97
刪除鍵 97
根據鍵更新它的值 98
得到鍵的集閤 99
得到值的集閤 99
遍曆 Map 集閤 100
如何將一個可變 Map 集閤轉換成不可變 Map 集閤 100
新的轉換函數 101
偏函數 101
剋隆 102
反轉 Map 的鍵值對 102
將一個 Set 集閤轉換成 Map 集閤 103
IntMap, LongMap 103
HashMap 104
SortedMap 和 immutable.TreeMap 104
immutable.ListMap,mutable.ListMap 105
mutable.LinkedHashMap 105
mutable.MultiMap 106
mutable.OpenHashMap 107
mutable.WeakHashMap 107
第 7 章 數組109
數組的初始化 110
數組的長度 112
更新數組 113
連接兩個數組 113
復製數組 113
生成等差數列 114
填充數組 114
tabulate 115
ArrayOps 115
Searching 116
WrappedArray 116
第 8 章 字符串(String 和 StringBuilder) 117
字符串方法 118
拼接字符串多次 119
把首字母大寫 119
字符串比較 120
字符串格式化 120
按照換行符分割字符串 123
正則錶達式 124
分割字符串 124
strip 字符串 125
集閤方法 126
字符串竄改(String Interpolation) 126
StringBuilder 128
第 9 章 緩衝器 129
增加元素 129
移除元素 130
Trim、clear 和 clone 131
ListBuffer, ArrayBuffer 132
RingBuffer 132
第 10 章 列錶 134
Nil, :: 134
初始化,以及 :: 和 ::: 操作符 135
模式匹配 136
MutableList 136
使用列錶實現快速排序 137
Option 137
第 11 章 棧和隊列 139
棧(Stack)139
ArrayStack . 141
不可變隊列(immutable.Queue) 143
可變隊列(mutable.Queue) 144
優先級隊列(PriorityQueue) 144
第 12 章 流 147
初始化:#:: 和 #::: 148
流相關類 150
記憶化(memoization) 150
棧溢齣(StackOverflowError) 150
OOM 問題 152
無限隨機數流 153
無限整數流 153
中綴錶達式和模式匹配 153
無限流 154
蓄水池抽樣算法 156
第 13 章 並行集閤 158
並行集閤的類型 159
可産生副作用的操作(Side-Effecting Operations) 160
非結閤操作(Non-Associative Operations)161
性能 162
串行集閤和並行集閤的轉換 163
不同集閤類型之間的轉換 164
並發集閤配置 165
第 14 章 Scala 集閤總結 168
相等(Equality) 168
性能 170
與 Java 集閤類的轉換 172
技巧和陷阱 174
發布訂閱類 177
for 推導式 (for comprehensions) 178
其他集閤庫 179
推薦序
非常高興國內有第一本用中文原創的 Scala 書籍。Scala 儼然成為瞭大數據領域的明星語言, 它強大的抽象和並發能力,以及高效的集閤操作讓它抓住瞭大數據的這波浪潮。
提起 Scala 很多人可能會先想到多範式、高並發等特點,其實在集閤庫的設計上 Scala 也 是非常大膽進取的。比如引入瞭 Tuple、不可變集閤,對很多集閤內置瞭map/reduce/filter/fold 等操作,支持模式匹配,等等,讓數據處理得到瞭極大的簡化。
另外,Scala 在設計上對 Java 的一些“不一緻性”或“直觀性”做瞭修正,比如用 Any 類 型統一瞭 Java 裏的引用類型和基礎類型,用統一的 Int 替代瞭 Java 裏的 Integer 和 int 兩種類型, 並針對這種值類型 (value type) 的運行時 Boxing/Unboxing 做瞭優化。還有 Java 的數組類型 在設計上齣於計算的方便被設計為瞭天然支持協變特性,這在 Scala 2.X 版本得到瞭修正,去 掉瞭協變。對於相等性的比較讓直觀的“==”等價於“equals”。
Scala 裏的不可變集閤主要從函數式語言的集閤庫裏演化而來,一方麵在並發情況下這些 數據避免瞭競爭所需要的鎖的開銷,另一方麵在底層則通過共享數據降低瞭集閤在更新時生 成新對象的成本。配閤惰性計算 (lazy evaluation) 可以發揮更大的威力。當然 Scala 也不反對 使用可變集閤,在追求性能的地方你可以根據自己的具體情況做齣選擇。
在學習 Scala 的集閤庫時,建議深入地瞭解一些“關鍵”集閤的實現,比如 List,它跟 Java 裏的 List 有著完全不同的設計,深入體會這個源自 Lisp 的遞歸結構的數據類型所錶達的 含義,對學習 Scala 有非常大的幫助。
這本書非常務實,提供瞭很多例子,由淺入深地帶領你瞭解 Scala 的集閤領域。不管是對 大數據領域還是對日常工作都有很大的裨益。
王宏江 挖財架構師《 Scala 函數式編程》譯者
在我十六年多的編程生涯中,大部分項目中我都使用 Java 開發。Java 的生態圈非常的龐大而豐富,可以幫助我快速地實現項目的架構和開發。雖然感覺 Java 的語法有很多囉唆的地方, 也調研過 Groovy、Python 等編程語言,但還是覺得 Java 比較適閤開發工作。但是當我嘗試 使用 Scala 實現瞭一個高性能的消息係統的時候,我徹底地喜歡上瞭Scala,它簡潔的語法、豐 富的特性、麵嚮對象和函數式編程的美妙結閤都給我留下瞭深刻的印象。因為 Scala 是基於 JVM 的編程語言,它可以使用 Java 實現的庫,充分利用 Java 生態圈中已有的庫,而性能上又 不會有多少損失,所以我經常使用 Scala 做一些編程的工作。通過閱讀 Kafka 等 Scala 實現框架, 也促使我更加地堅信 Scala 的簡潔高效。
但是,完全掌握 Scala 的特性、熟練使用它的庫和編程方式進行開發卻不是一件容易的 事情。如果有 Java 編程經驗,則 Scala 入門會是一件很容易的事情,但是到專傢級彆卻是一 個麯摺的過程。這是因為,一、Scala 的語法相比其他語言,如 Java、Python、Go 等要復雜很多, 要想完全理解和掌握需要較長的時間。二、Scala 本身提供瞭非常多的庫,尤其是占重要部分 的集閤庫,隻有熟練掌握它們纔能輕鬆地應用到開發中。
對於第一個問題,現在已經有瞭多本介紹和學習 Scala 語法的書,尤其是剛剛齣版的 Scala 之父 Martin Odersky 編寫的《Programming in Scala》第三版,都是很好的學習和深入 瞭解 Scala 語法的圖書。通過編程實踐以及閱讀其他 Scala 開發的項目,也會很快地提高 Scala 語法的掌握程度。
對於第二個問題,尤其是 Scala 集閤框架的全麵介紹,並沒有太好的學習資料,相關的 Scala 書籍中會有一兩章關於 Scala 集閤的介紹,官方的網站上也有多篇關於 Scala 集閤的教程, 但是總體來說都是粗略地或者說局部地介紹瞭Scala集閤框架的類和方法, 看過之後若有所得, 但並不踏實,總是感覺沒有全麵地掌握 Scala 集閤。所以針對這個需求,我動手編寫瞭這本書, 主要目的就是編寫一本全麵、專門、深入地介紹 Scala 集閤的書與大傢分享。
作為一本專門介紹 Scala 集閤的圖書,它有一些其他技術圖書沒有的特色:
圖文並茂。 本書不僅提供瞭多幅插圖,列齣瞭並發 / 非並發集閤類和 Trait 的繼承關係, 還為最主要的集閤的方法提供瞭直觀的圖例,可以實現見圖識意。
歸類。 將 類 似 的方法放在一起介紹,比如 map 和 flatmap,scan、scanLeft 和 scanRight,size 和 length 等。
對比。 將容易混淆的方法進行對比,剖析它們之間的區彆,比如 head、last、init、 tail,reduce 和 fold 方法的區彆等。
代碼實例。通過最簡單的代碼類和方法的功能。代碼簡短而功能直接。
錶格。通過錶格進行匯總和知識整理。
全麵。本書詳細介紹瞭 Scala 集閤絕大部分的類和方法,對於一些類還介紹瞭它的曆 史優化過程和當前的問題。
深入。對於一些典型的集閤類,本書還深入介紹瞭它們的底層實現,通過底層實現瞭 解它們的特性和性能。
我期望能通過多種方式搭建起本書的架構,多方位地幫助讀者學習和掌握 Scala 集閤庫。 而且本書還能作為案頭的一本常用查找手冊,當對 Scala 集閤的類或者方法有疑惑時,可以通 過翻看本書找到答案。
聯係方式
盡管我盡量保持本書內容的準確性,每一個方法和例子都編寫測試過,但是因為 Scala 集閤框架的復雜和知識點比較多,加之作者水平有限,疏漏和錯誤在所難免,懇請廣大讀者 批評指正。如果你發現瞭錯誤或好的建議,也可以聯係我。我的聯係方式如下:
郵箱:oldnest@gmail.com
新浪微博:colobu
緻謝
特彆感謝電子工業齣版社的編輯張春雨,沒有你的努力和辛苦工作,就不會有本書順利的 齣版。沒有你的激勵,可能本書的內容隻能三三兩兩地散落在我的筆記或者博客中,不能集 結齣版。
感謝我的老婆和兒子。寫書占用瞭我大部分的業餘時間,不能花更多的時間陪伴你們。 春節的時候也隻能讓你們自己迴娘傢,給我獨自的時間寫稿和修改,沒有你們的理解和支持, 我也不能安心地寫作。
謝謝閱讀本書的朋友,如果沒有你們對相關知識的渴求,也就不會有本書的編寫。你們 對 Scala 的喜愛,對 Scala 集閤框架的知識的渴求,就是我寫本書最大的動力。
Scala集閤技術手冊 下載 mobi pdf epub txt 電子書 格式 2024
Scala集閤技術手冊 下載 mobi epub pdf 電子書支持國人原創!
評分對集閤方麵的知識講的很詳細
評分不錯
評分還行吧,可以看成scala doc的翻譯與提示
評分還行吧,可以看成scala doc的翻譯與提示
評分經典好書
評分支持國人原創!
評分不錯
評分是一本很好的參考書
Scala集閤技術手冊 mobi epub pdf txt 電子書 格式下載 2024