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