Java語言程序設計與數(shù)據(jù)結構(進階篇)(原書第11版)
定 價:99 元
叢書名:華章教育
- 作者:[美]梁勇(Y. Daniel Liang)
- 出版時間:2018/10/1
- ISBN:9787111610038
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP312.8JA
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書是Java語言的經典教材,中文版分為基礎篇和進階篇,主要介紹程序設計基礎、面向對象程序設計、GUI程序設計、數(shù)據(jù)結構和算法、高級Java程序設計等內容。本書以示例介紹解決問題的技巧,提供大量的程序清單,每章配有大量復習題和編程練習題,幫助讀者掌握編程技術,并應用所學技術解決實際工程問題。進階篇突出數(shù)據(jù)結構和算法,主要涵蓋以下內容:泛型,規(guī)則集和映射,開發(fā)高效算法,實現(xiàn)線性表、棧、隊列和優(yōu)先隊列,二叉搜索樹,AVL樹,散列,圖及其應用,加權圖及其應用,集合流的聚合操作等。本書可作為高等院校計算機專業(yè)相關課程的教材,也可供Java語言及編程愛好者參考。
許多讀者就本書之前的版本給出了很多反饋。這些評論和建議極大地改進了本書。這一版在表述、組織、示例、練習題以及附錄方面都有大幅提高。
本書采用基礎優(yōu)先的方法,在設計用戶自定義類之前,首先介紹基本的程序設計概念和技術。選擇語句、循環(huán)、方法和數(shù)組這樣的基本概念和技術是程序設計的基礎,它們?yōu)閷W生進一步學習面向對象程序設計和高級Java程序設計做好準備。
本書以問題驅動的方式來教授程序設計,將重點放在問題的解決而不是語法上。我們通過使用在各種應用情景中引發(fā)思考的問題,使得程序設計的介紹變得更加有趣。前面章節(jié)的主線放在問題的解決上,引入合適的語法和庫以支持編寫解決問題的程序。為了支持以問題驅動的方式來教授程序設計,本書提供了大量不同難度的問題來激發(fā)學生的積極性。為了吸引各個專業(yè)的學生來學習,這些問題涉及很多應用領域,包括數(shù)學、科學、商業(yè)、金融、游戲、動畫以及多媒體等。
本書將程序設計、數(shù)據(jù)結構和算法無縫整合在一起,采用一種實用的方式來教授數(shù)據(jù)結構。首先介紹如何使用各種數(shù)據(jù)結構來開發(fā)高效的算法,然后演示如何實現(xiàn)這些數(shù)據(jù)結構。通過實現(xiàn),學生可以深入理解數(shù)據(jù)結構的效率,以及如何和何時使用某種數(shù)據(jù)結構。最后,我們設計和實現(xiàn)了針對樹和圖的用戶自定義數(shù)據(jù)結構。
本書廣泛應用于全球各大學的程序設計入門、數(shù)據(jù)結構和算法課程中。完全版包括程序設計基礎、面向對象程序設計、GUI程序設計、數(shù)據(jù)結構、算法、并行、網(wǎng)絡、數(shù)據(jù)庫和Web程序設計。這個版本旨在把學生培養(yǎng)成精通Java的程序員。基礎篇可用于程序設計的第一門課程(通常稱為CS1);A篇包含完全版的前18章內容,本書還有一個AP版本,適合學習AP計算機科學(AP Computer Science)課程的高中生使用。
教授編程的最好途徑是通過示例,而學習編程的唯一途徑是通過動手練習。本書通過示例對基本概念進行了講解,并提供了大量不同難度的練習題供學生進行練習。在我們的程序設計課程中,每次課后都布置了編程練習。
我們的目標是編寫一本可以通過各種應用場景中的有趣示例來教授問題求解和程序設計的教材。如果您有任何關于如何改進本書的評論或建議,請給我發(fā)郵件。
Y. Daniel Liang
y.daniel.liang@gmail.com
www.cs.armstrong.edu/liang
www.pearsonhighered.com/liang
ACM/IEEE課程體系2013版和ABET課程評價
新的ACM/IEEE課程體系2013版將知識體系組織成18個知識領域。為了幫助教師基于本書設計課程,我們提供了示例教學大綱來確定知識領域和知識單元。作為一個常規(guī)的定制示例,示例教學大綱用于三學期的課程系列。示例教學大綱可以從教師資源配套網(wǎng)站獲取。
許多讀者來自ABET認證計劃。ABET認證的一個關鍵組成部分是,通過針對課程效果的持續(xù)的課程評價確定薄弱環(huán)節(jié)。我們在教師資源配套網(wǎng)站中提供了課程效果示例,以及用于衡量課程效果的示例考試。
本版新增內容
本版對各個細節(jié)都進行了全面修訂,以增強其清晰性、表述、內容、示例和練習題。本版主要的改進如下:
書名改為了“Java語言程序設計與數(shù)據(jù)結構”,以體現(xiàn)在數(shù)據(jù)結構方面的增強。本書使用一種實用的方式來介紹、實現(xiàn)和使用數(shù)據(jù)結構,并涵蓋了一門典型的數(shù)據(jù)結構課程中的所有主題。另外,還提供了額外的獎勵章節(jié)來介紹高級的數(shù)據(jù)結構,比如2-4樹、B樹以及紅黑樹等。
針對最新的Java技術進行了更新。使用Java 8版本中的新特征對示例和練習進行了改進和簡化。
在第13章的接口介紹中,引入了默認方法和靜態(tài)方法。
GUI相關章節(jié)都更新到JavaFX 8。改寫了所有示例。示例和練習中的用戶界面現(xiàn)在都是可以改變尺寸并且居中顯示的。
在第15章的示例中,涵蓋了內部類、匿名內部類以及l(fā)ambda表達式的內容。
數(shù)據(jù)結構相關章節(jié)中,更多的示例和練習采用了lambda表達式來簡化編程。方法引用在20.6節(jié)介紹Comparator接口時進行了介紹。
在第20章中介紹了forEach方法,作為對集合中每個元素應用一個動作而進行的循環(huán)的簡單替代方法。
在第24~29章中,使用了Java 8中接口的默認方法重新設計和簡化了MyList、MyArrayList、MyLinkedList、Tree、BST、AVLTree、MyMap、MyHashMap、MySet、MyHashSet、Graph、UnweightedGraph和WeightedGraph的實現(xiàn)。
第30章為全新章節(jié),介紹集合流的聚合操作。
第31章(獎勵章節(jié))介紹了FXML和Scene Builder可視化工具。
重新設計了配套網(wǎng)站,增加了新的交互式測試題、復習題、動畫以及現(xiàn)場編程。
在教師資源網(wǎng)站上為教師額外提供了200多道編程練習題,并給出了答案。這些練習題沒有出現(xiàn)在教材中。
可以訪問www.pearsonhighered.com/liang,獲得和前一版本的關聯(lián)以及新特征的完整列表。
教學特色
本書使用以下要素組織素材:
教學目標:在每章開始列出學生學習本章應該掌握的內容,學完這章后,學生能夠判斷自己是否達到這個目標。
引言:提出引發(fā)思考的問題以展開討論,激發(fā)讀者深入探討該章內容。
要點提示:突出每節(jié)中涵蓋的重要概念。
復習題:按節(jié)組織,幫助學生復習相關內容并評估掌握的程度。
示例學習:通過精心挑選示例,以容易理解的方式教授問題求解和程序設計概
梁勇(Y. Daniel Liang) 現(xiàn)為阿姆斯特朗亞特蘭大州立大學計算機科學系教授。之前曾是普度大學計算機科學系副教授,并曾兩次獲得普度大學杰出研究獎。他所編寫的Java教程在美國大學Java課程中采用率極高,同時他還兼任Prentice Hall Java系列叢書的編輯。他是“Java Champion”榮譽得主,并在世界各地給在校學生和程序員做Java語言及技術方面的講座。
出版者的話
中文版序
譯者序
前言
第19章 泛型 1
19.1 引言 1
19.2 動機和優(yōu)點 1
19.3 定義泛型類和接口 4
19.4 泛型方法 5
19.5 示例學習:對一個對象數(shù)組進行排序 7
19.6 原生類型和向后兼容 8
19.7 通配泛型 10
19.8 泛型的擦除和限制 12
19.9 示例學習:泛型矩陣類 15
關鍵術語 19
本章小結 19
測試題 20
編程練習題 20
第20章 線性表、棧、隊列和優(yōu)先隊列 22
20.1 引言 22
20.2 集合 23
20.3 迭代器 26
20.4 使用forEach方法 27
20.5 線性表 28
20.5.1 List接口中的通用方法 28
20.5.2 數(shù)組線性表類ArrayList和鏈表類LinkedList 29
20.6 Comparator接口 32
20.7 線性表和集合的靜態(tài)方法 36
20.8 示例學習:彈球 39
20.9 向量類和棧類 42
20.10 隊列和優(yōu)先隊列 44
20.10.1 Queue接口 44
20.10.2 雙端隊列Deque和鏈表LinkedList 45
20.11 示例學習:表達式求值 47
關鍵術語 51
本章小結 51
測試題 51
編程練習題 51
第21章 規(guī)則集和映射 57
21.1 引言 57
21.2 規(guī)則集 57
21.2.1 HashSet 58
21.2.2 LinkedHashSet 61
21.2.3 TreeSet 62
21.3 比較規(guī)則集和線性表的性能 65
21.4 示例學習:關鍵字計數(shù) 67
21.5 映射 69
21.6 示例學習:單詞的出現(xiàn)次數(shù) 73
21.7 單元素與不可變的集合和映射 75
關鍵術語 76
本章小結 76
測試題 77
編程練習題 77
第22章 開發(fā)高效算法 79
22.1 引言 79
22.2 使用大?O?標記來衡量算法效率 79
22.3 示例:確定大O 81
22.4 分析算法的時間復雜度 85
22.4.1 分析二分查找算法 85
22.4.2 分析選擇排序算法 85
22.4.3 分析漢諾塔問題 85
22.4.4 常用的遞推關系 86
22.4.5 比較常用的增長函數(shù) 86
22.5 使用動態(tài)編程尋找斐波那契數(shù) 87
22.6 使用歐幾里得算法求最大公約數(shù) 89
22.7 尋找素數(shù)的高效算法 93
22.8 使用分而治之法尋找最近點對 99
22.9 使用回溯法解決八皇后問題 101
22.10 計算幾何:尋找凸包 103
22.10.1 卷包裹算法 104
22.10.2 格雷厄姆算法 105
關鍵術語 106
本章小結 106
測試題 107
編程練習題 107
第23章 排序 114
23.1 引言 114
23.2 插入排序 115
23.3 冒泡排序 117
23.4 歸并排序 119
23.5 快速排序 122
23.6 堆排序 126
23.6.1 堆的存儲 127
23.6.2 添加一個新的結點 127
23.6.3 刪除根結點 128
23.6.4 Heap類 129
23.6.5 使用Heap類進行排序 131
23.6.6 堆排序的時間復雜度 132
23.7 桶排序和基數(shù)排序 133
23.8 外部排序 135
23.8.1 實現(xiàn)階段Ⅰ 136
23.8.2 實現(xiàn)階段Ⅱ 137
23.8.3 結合兩個階段 139
23.8.4 外部排序復雜度 141
關鍵術語 142
本章小結 142
測試題 142
編程練習題 142
第24章 實現(xiàn)線性表、棧、隊列和優(yōu)先隊列 146
24.1 引言 146
24.2 線性表的通用操作 146
24.3 數(shù)組線性表 149
24.4 鏈表 156
24.4.1 結點 156
24.4.2 MyLinkedList類 158
24.4.3 實現(xiàn)MyLinkedList 159
24.4.4 MyArrayList和MyLinkedList 167
24.4.5 鏈表的變體 167
24.5 棧和隊列 169
24.6 優(yōu)先隊列 172
本章小結 173
測試題 174
編程練習題 174
第25章 二叉搜索樹 176
25.1 引言 176
25.2 二叉搜索樹 176
25.2.1 表示二叉搜索樹 177
25.2.2 查找一個元素 178
25.2.3 在BST中插入一個元素 178
25.2.4 樹的遍歷 179
25.2.5 BST類 180
25.3 刪除BST中的一個元素 189
25.4 樹的可視化和MVC 194
25.5 迭代器 197
25.6 示例學習:數(shù)據(jù)壓縮 199
關鍵術語 204
本章小結 204
測試題 204
編程練習題 204
第26章 AVL樹 208
26.1 引言 208
26.2 重新平衡樹 209
26.3 為AVL樹設計類 211
26.4 重寫insert方法 212
26.5 實現(xiàn)旋轉 213
26.6 實現(xiàn)delete方法 213
26.7 AVLTree類 214
26.8 測試 AVLTree類 219
26.9 AVL樹的時間復雜度分析 222
關鍵術語 222
本章小結 223
測試題 223
編程練習題 223
第27章 散列 225
27.1 引言 225
27.2 什么是散列 225
27.3 散列函數(shù)和散列碼 226
27.3.1 基本數(shù)據(jù)類型的散列碼 226
27.3.2 字符串的散列碼 227
27.3.3 壓縮散列碼 227
27.4 使用開放地址法處理沖突 228
27.4.1 線性探測法 228
27.4.2 二次探測法 230
27.4.3 雙重散列法 230
27.5 使用分離鏈接法處理沖突 232
27.6 裝填因子和再散列 232
27.7 使用散列實現(xiàn)映射 233
27.8 使用散列實現(xiàn)規(guī)則集 242
關鍵術語 248
本章小結 249
測試題 249
編程練習題 249
第28章 圖及其應用 251
28.1 引言 251
28.2 基本的圖術語 252
28.3 表示圖 254
28.3.1 表示頂點 254
28.3.2 表示邊:邊數(shù)組 255
28.3.3 表示邊:Edge對象 256
28.3.4 表示邊:鄰接矩陣 256
28.3.5 表示邊:鄰接線性表 257
28.4 圖的建模 259
28.5 圖的可視化 268
28.6 圖的遍歷 271
28.7 深度優(yōu)先搜索 272
28.7.1 DFS的算法 272
28.7.2 DFS的實現(xiàn) 273
28.7.3 DFS的應用 274
28.8 示例學習:連通圓問題 275
28.9 廣度優(yōu)先搜索 278
28.9.1 BFS的算法 278
28.9.2 BFS的實現(xiàn) 278
28.9.3 BFS的應用 280
28.10 示例學習:9枚硬幣反面問題 281
關鍵術語 286
本章小結 286
測試題 286
編程練習題 286
第29章 加權圖及其應用 291
29.1 引言 291
29.2 加權圖的表示 292
29.2.1 加權邊的表示:邊數(shù)組 292
29.2.2 加權鄰接矩陣 293
29.2.3 鄰接線性表 293
29.3 WeightedGraph類 294
29.4 最小生成樹 301
29.4.1 最小生成樹算法 302
29.4.2 完善Prim的MST算法 303
29.4.3 MST算法的實現(xiàn) 304
29.5 尋找最短路徑 307
29.6 示例學習:加權的9枚硬幣反面問題 315
關鍵術語 318
本章小結 318
測試題 319
編程練習題 319
第30章 集合流的聚合操作 325
30.1 引言 325
30.2 流管道 326
30.2.1 Stream.of、limit、forEach方法 328
30.2.2 sorted方法 329
30.2.3 filter方法 329
30.2.4 max和min方法 329
30.2.5 anyMatch、allMatch和noneMatch方法 329
30.2.6 map、distinct和count方法 329
30.2.7 findFirst、findAny和toArray方法 330
30.3 IntStream、LongStream和DoubleStream 331
30.4 并行流 333
30.5 使用reduce方法進行流的歸約 336
30.6 使用collect方法進行流的歸約 338
30.7 使用groupingBy收集器進行元素分組 341
30.8 示例學習 344
30.8.1 示例學習:數(shù)字分析 344
30.8.2 示例學習:計算字母的出現(xiàn)次數(shù) 345
30.8.3 示例學習:計算字符串中每個字母的出現(xiàn)次數(shù) 346
30.8.4 示例學習:處理二維數(shù)組中的所有元素 347
30.8.5 示例學習:得到目錄大小 348
30.8.6 示例學習:關鍵字計數(shù) 349
30.8.7 示例學習:單詞出現(xiàn)次數(shù) 350
本章小結 351
測試題 351
編程練習題 351
附錄A Java關鍵字 353
附錄B ASCII字符集 354
附錄C 操作符優(yōu)先級表 355
附錄D Java修飾符 356
附錄E 特殊浮點值 357
附錄F 數(shù)系 358
附錄G 位操作符 362
附錄H 正則表達式 363
附錄I 枚舉類型 367