Java語言程序設(shè)計(進(jìn)階篇)(原書第12版)
定 價:139 元
叢書名:計算機(jī)科學(xué)叢書
- 作者:[美]梁勇(Y. Daniel Liang)
- 出版時間:2021/9/1
- ISBN:9787111689355
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP312.8
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書是Java語言的經(jīng)典教材,中文版分為基礎(chǔ)篇和進(jìn)階篇,主要介紹程序設(shè)計基礎(chǔ)、面向?qū)ο蟪绦蛟O(shè)計、GUI程序設(shè)計、數(shù)據(jù)結(jié)構(gòu)和算法、高級Java程序設(shè)計等內(nèi)容。本書通過示例講解問題求解技巧,提供大量的程序清單,每章配有豐富的復(fù)習(xí)題和編程練習(xí)題,幫助讀者掌握編程技術(shù),并學(xué)會應(yīng)用所學(xué)技術(shù)解決實際開發(fā)中遇到的問題。進(jìn)階篇主要討論數(shù)據(jù)結(jié)構(gòu)和算法,包括線性表、棧、隊列、規(guī)則集、映射、排序、樹和圖等內(nèi)容。本書可作為高等院校計算機(jī)相關(guān)專業(yè)程序設(shè)計課程的教材,也可作為Java語言及編程愛好者的參考資料。
許多讀者就本書之前的版本給出了很多反饋,這些評論和建議極大地改進(jìn)了本書。這一版在表述、組織、示例、練習(xí)題以及附錄方面都有大幅改進(jìn)。
本書采用基礎(chǔ)優(yōu)先的方法,在設(shè)計用戶自定義類之前,首先介紹基本的程序設(shè)計概念和技術(shù)。選擇語句、循環(huán)、方法和數(shù)組這樣的基本概念與技術(shù)是程序設(shè)計的基礎(chǔ),打好這些基礎(chǔ)將幫助學(xué)生為進(jìn)一步學(xué)習(xí)面向?qū)ο蟪绦蛟O(shè)計和高級Java程序設(shè)計做好準(zhǔn)備。
本書以問題驅(qū)動的方式來教授程序設(shè)計,將重點(diǎn)放在問題的解決而不是語法上。我們通過使用在各種應(yīng)用場景中引發(fā)思考的問題,使程序設(shè)計的介紹變得更加有趣。前面章節(jié)的主線放在問題的解決上,引入合適的語法和庫以支持編寫解決問題的程序。為了支持以問題驅(qū)動的方式來教授程序設(shè)計,本書提供了大量不同難度的問題來激發(fā)學(xué)生的積極性。為了吸引各個專業(yè)的學(xué)生來學(xué)習(xí),這些問題涵蓋很多應(yīng)用領(lǐng)域,包括數(shù)學(xué)、科學(xué)、商業(yè)、金融、游戲、動畫以及多媒體等。
本書將程序設(shè)計、數(shù)據(jù)結(jié)構(gòu)和算法無縫整合在一起,采用一種實用的方式來教授數(shù)據(jù)結(jié)構(gòu)。首先介紹如何使用各種數(shù)據(jù)結(jié)構(gòu)來開發(fā)高效的算法,然后演示如何實現(xiàn)這些數(shù)據(jù)結(jié)構(gòu)。通過實現(xiàn),學(xué)生可以深入理解數(shù)據(jù)結(jié)構(gòu)的效率,以及如何和何時使用某種數(shù)據(jù)結(jié)構(gòu)。后,我們設(shè)計和實現(xiàn)了針對樹和圖的用戶自定義數(shù)據(jù)結(jié)構(gòu)。
本書廣泛應(yīng)用于全球眾多大學(xué)的程序設(shè)計入門、數(shù)據(jù)結(jié)構(gòu)和算法課程中。完全版包括程序設(shè)計基礎(chǔ)、面向?qū)ο蟪绦蛟O(shè)計、GUI程序設(shè)計、數(shù)據(jù)結(jié)構(gòu)、算法、并行、網(wǎng)絡(luò)、數(shù)據(jù)庫和Web程序設(shè)計。這個版本旨在把學(xué)生培養(yǎng)成精通Java的程序員;A(chǔ)篇包含完全版的前18章內(nèi)容,可用于程序設(shè)計的門課程(通常稱為CS1)。本書還有一個AP版本,適合學(xué)習(xí)AP計算機(jī)科學(xué)(AP Computer Science)課程的高中生使用。
教授編程的好途徑是通過示例,而學(xué)習(xí)編程的途徑是通過動手練習(xí)。本書通過示例對基本概念進(jìn)行講解,并提供大量不同難度的練習(xí)題供學(xué)生進(jìn)行練習(xí)。在我們的程序設(shè)計課程中,每次課后都布置了編程練習(xí)。
我們的目標(biāo)是編寫一本可以通過各種應(yīng)用場景中的有趣示例來教授問題求解和程序設(shè)計的教材。如果你有任何關(guān)于如何改進(jìn)本書的意見或建議,請給我發(fā)郵件。
ACM/IEEE課程體系2013版和ABET課程評價
新的ACM/IEEE計算機(jī)科學(xué)課程體系2013版將知識體系組織成18個知識領(lǐng)域。為了幫助教師基于本書設(shè)計課程,我們提供了示例教學(xué)大綱來確定知識領(lǐng)域和知識單元。作為一個常規(guī)的定制示例,示例教學(xué)大綱用于三學(xué)期的課程系列。示例教學(xué)大綱可以從教師資源配套網(wǎng)站獲取。
許多讀者來自ABET認(rèn)證計劃。ABET認(rèn)證的一個關(guān)鍵組成部分是,通過針對課程效果的持續(xù)課程評價確定學(xué)習(xí)中的薄弱環(huán)節(jié)。我們在教師資源配套網(wǎng)站中提供了課程效果示例,以及用于檢驗課程效果的樣卷。
本版新增內(nèi)容
本版對各個細(xì)節(jié)都進(jìn)行了全面修訂,以更清晰地呈現(xiàn)知識、示例和練習(xí)題。本版的主要改進(jìn)如下:
更新至Java 9、10和11。使用Java 9、10和11版本中的新特性對示例進(jìn)行了改進(jìn)和簡化。
GUI相關(guān)章節(jié)更新到JavaFX 11,并改寫了示例。示例和練習(xí)題中的用戶界面現(xiàn)在可以改變尺寸并且居中顯示。
數(shù)據(jù)結(jié)構(gòu)相關(guān)章節(jié)中,更多的示例和練習(xí)題采用lambda表達(dá)式來簡化編程。
Comparable和Comparator都被用于比較Heap、PriorityQueue、BST以及AVLTree中的元素。這樣與Java API保持一致,更加實用、靈活。
第22章引入了字符串匹配算法。
添加了視頻注解。
提供了沒有出現(xiàn)在書中的額外習(xí)題,這些習(xí)題僅供教師使用。
可以訪問本書配套網(wǎng)站www.pearsonhighered.com/liang,了解這一版與前一版的關(guān)聯(lián)以及全部的新特性。
教學(xué)特色
本書使用以下要素組織素材,以幫助讀者高效學(xué)習(xí):
教學(xué)目標(biāo):在每章開始列出學(xué)生應(yīng)該掌握的內(nèi)容,學(xué)完這章后,學(xué)生能夠判斷自己是否達(dá)到這些目標(biāo)。
引言:提出引發(fā)思考的問題以展開討論,激發(fā)讀者深入探討相關(guān)內(nèi)容的積極性。
要點(diǎn)提示:突出每節(jié)中涵蓋的重要概念。
復(fù)習(xí)題:幫助學(xué)生復(fù)習(xí)每節(jié)相關(guān)內(nèi)容并評估掌握的程度。
問題和示例學(xué)習(xí):通過精心挑選示例,以易于理解的方式教授問題求解和程序設(shè)計概念。本書使用多個短小的、簡單的、激發(fā)興趣的例子來演示重要的概念。
本章小結(jié):回顧學(xué)生應(yīng)該理解和記住的重要主題,有助于鞏固所學(xué)的關(guān)鍵概念。
測試題:可以在線訪問,按章節(jié)組織,讓學(xué)生可以就編程概念和技術(shù)進(jìn)行自我測試。
編程練習(xí)題:按章節(jié)組織,為學(xué)生提供自主應(yīng)用所學(xué)新技能的機(jī)會。練習(xí)題的難度分為容易(沒有星號)、適度(*)、難(**)和具有挑戰(zhàn)性(***)四個級別。學(xué)習(xí)程序設(shè)計的竅門就是“實踐,實踐,再實踐”。所以,本書提供了大量的編程練習(xí)題。教師資源網(wǎng)站還為教師提供了額外的200多道帶有答案的編程練習(xí)題。
注意、提示、警告和設(shè)計指南:貫穿全書,對程序開發(fā)的重要方面提供有價值的建議和見解。
注意:提供學(xué)習(xí)主題的附加信息,鞏固重要概念。
提示:教授良好的程序設(shè)計風(fēng)格和實踐經(jīng)驗。
警告:幫助學(xué)生避開程序設(shè)計誤區(qū)。
設(shè)計指南
【有更新】
作者簡介
梁勇(Y. Daniel Liang) 現(xiàn)為阿姆斯特朗亞特蘭大州立大學(xué)計算機(jī)科學(xué)系教授。之前曾是普渡大學(xué)計算機(jī)科學(xué)系副教授,并兩次獲得普渡大學(xué)杰出研究獎。他所編寫的Java教程在美國大學(xué)Java課程中采用率極高,同時他還兼任Prentice Hall Java系列叢書的編輯。他是“Java Champion”榮譽(yù)得主,并在世界各地為在校學(xué)生和程序員做Java程序設(shè)計方法及技術(shù)方面的講座。
【有更新】
譯者簡介
戴開宇 復(fù)旦大學(xué)軟件學(xué)院教師,工程碩士導(dǎo)師,中國計算機(jī)學(xué)會會員。博士畢業(yè)于上海交通大學(xué)計算機(jī)應(yīng)用專業(yè),2011~2012年在美國佛羅里達(dá)大學(xué)作訪問學(xué)者。承擔(dān)多門本科專業(yè)課程、通識教育課程以及工程碩士課程,這些課程被評為校精品課程、上海市重點(diǎn)建設(shè)課程、IBM-教育部精品課程等。
中文版序
譯者序
前言
第19章 泛型 1
19.1 引言 1
19.2 動機(jī)和優(yōu)點(diǎn) 1
19.3 定義泛型類和接口 4
19.4 泛型方法 5
19.5 示例學(xué)習(xí):對一個對象數(shù)組進(jìn)行排序 7
19.6 原生類型和向后兼容 8
19.7 通配泛型 10
19.8 泛型的擦除和限制 12
19.9 示例學(xué)習(xí):泛型矩陣類 15
關(guān)鍵術(shù)語 19
本章小結(jié) 19
測試題 20
編程練習(xí)題 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 ArrayList和LinkedList類 30
20.6 Comparator接口 32
20.7 用于線性表和集合的靜態(tài)方法 36
20.8 示例學(xué)習(xí):彈球 40
20.9 向量類和棧類 43
20.10 隊列和優(yōu)先隊列 44
20.10.1 Queue接口 44
20.10.2 雙端隊列Deque和鏈表LinkedList 45
20.11 示例學(xué)習(xí):表達(dá)式求值 47
關(guān)鍵術(shù)語 51
本章小結(jié) 51
測試題 52
編程練習(xí)題 52
第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 示例學(xué)習(xí):關(guān)鍵字計數(shù) 67
21.5 映射 69
21.6 示例學(xué)習(xí):單詞的出現(xiàn)次數(shù) 73
21.7 單例與不可變的集合和映射 75
關(guān)鍵術(shù)語 76
本章小結(jié) 76
測試題 77
編程練習(xí)題 77
第22章 開發(fā)高效算法 79
22.1 引言 79
22.2 使用大O表示法來衡量算法效率 79
22.3 示例:確定大O 81
22.4 分析算法的時間復(fù)雜度 85
22.4.1 分析二分查找算法 85
22.4.2 分析選擇排序算法 85
22.4.3 分析漢諾塔問題 85
22.4.4 常用的遞推關(guān)系 86
22.4.5 比較常用的增長函數(shù) 86
22.5 使用動態(tài)編程求斐波那契數(shù) 87
22.6 使用歐幾里得算法求公約數(shù) 89
22.7 求素數(shù)的高效算法 93
22.8 使用分治法尋找近點(diǎn)對 98
22.9 使用回溯法解決八皇后問題 101
22.10 計算幾何:尋找凸包 103
22.10.1 卷包裹算法 104
22.10.2 格雷厄姆算法 105
22.11 字符串匹配 106
22.11.1 暴力算法 106
22.11.2 Boyer-Moore算法 107
22.11.3 Knuth-Morris-Pratt算法 109
關(guān)鍵術(shù)語 112
本章小結(jié) 112
測試題 113
編程練習(xí)題 113
第23章 排序 120
23.1 引言 120
23.2 插入排序 121
23.3 冒泡排序 123
23.4 歸并排序 125
23.5 快速排序 128
23.6 堆排序 132
23.6.1 堆的存儲 133
23.6.2 添加一個新結(jié)點(diǎn) 133
23.6.3 刪除根結(jié)點(diǎn) 134
23.6.4 Heap類 135
23.6.5 使用Heap類進(jìn)行排序 137
23.6.6 堆排序的時間復(fù)雜度 138
23.7 桶排序和基數(shù)排序 139
23.8 外部排序 141
23.8.1 實現(xiàn)階段Ⅰ 143
23.8.2 實現(xiàn)階段Ⅱ 143
23.8.3 結(jié)合兩個階段 145
23.8.4 外部排序復(fù)雜度 148
關(guān)鍵術(shù)語 148
本章小結(jié) 148
測試題 149
編程練習(xí)題 149
第24章 實現(xiàn)線性表、棧、隊列和優(yōu)先隊列 153
24.1 引言 153
24.2 線性表的通用操作 153
24.3 數(shù)組線性表 156
24.4 鏈表 163
24.4.1 結(jié)點(diǎn) 163
24.4.2 MyLinkedList類 165
24.4.3 實現(xiàn)MyLinkedList 166
24.4.4 MyArrayList和MyLinkedList 174
24.4.5 鏈表的變體 174
24.5 棧和隊列 176
24.6 優(yōu)先隊列 179
本章小結(jié) 180
測試題 181
編程練習(xí)題 181
第25章 二叉搜索樹 183
25.1 引言 183
25.2 二叉搜索樹基礎(chǔ) 183
25.3 表示二叉搜索樹 184
25.4 查找一個元素 185
25.5 在BST中插入一個元素 185
25.6 樹的遍歷 187
25.7 BST類 188
25.8 刪除BST中的一個元素 197
25.9 樹的可視化和MVC 202
25.10 迭代器 205
25.11 示例學(xué)習(xí):數(shù)據(jù)壓縮 207
關(guān)鍵術(shù)語 211
本章小結(jié) 211
測試題 212
編程練習(xí)題 212
第26章 AVL樹 216
26.1 引言 216
26.2 重新平衡樹 217
26.3 為AVL樹設(shè)計類 219
26.4 重寫insert方法 220
26.5 實現(xiàn)旋轉(zhuǎn) 221
26.6 實現(xiàn)delete方法 221
26.7 AVLTree類 222
26.8 測試 AVLTree類 227
26.9 AVL樹的時間復(fù)雜度分析 230