內容簡介
本書是Java語言的經典教材,中文版分為基礎篇和進階篇,主要介紹程序設計基礎、麵嚮對象程序設計、GUI程序設計、數據結構和算法、高級Java程序設計等內容。本書可作為高等院校相關專業程序設計課程的基礎教材,也可作為Java語言及編程愛好者的參考資料。
目錄
Introduction to Java Programming, Comprehensive Version, Tenth Edition
齣版者的話
中文版序
譯者序
前言
第19章 泛型 1
19.1 引言 1
19.2 動機和優點 1
19.3 定義泛型類和接口 4
19.4 泛型方法 5
19.5 示例學習:對一個對象數組進行排序 7
19.6 原始類型和嚮後兼容 8
19.7 通配泛型 10
19.8 消除泛型和對泛型的限製 12
19.9 示例學習:泛型矩陣類 15
關鍵術語 19
本章小結 19
測試題 20
編程練習題 20
第20章 綫性錶、棧、隊列和優先隊列 21
20.1 引言 21
20.2 閤集 21
20.3 迭代器 25
20.4 綫性錶 26
20.4.1 List接口中的通用方法 26
20.4.2 數組綫性錶類ArrayList和鏈錶類LinkedList 27
20.5 Comparator接口 30
20.6 綫性錶和閤集的靜態方法 32
20.7 示例學習:彈球 35
20.8 嚮量類和棧類 38
20.9 隊列和優先隊列 40
20.9.1 Queue接口 40
20.9.2 雙端隊列Deque和鏈錶LinkedList 40
20.10 示例學習:錶達式求值 43
關鍵術語 47
本章小結 47
測試題 47
編程練習題 47
第21章 集閤和映射錶 53
21.1 引言 53
21.2 集閤 53
21.2.1 HashSet 54
21.2.2 LinkedHashSet 57
21.2.3 TreeSet 58
21.3 比較集閤和綫性錶的性能 61
21.4 示例學習:統計關鍵字 63
21.5 映射錶 65
21.6 示例學習:單詞的齣現次數 69
21.7 單元素與不可變的閤集和映射錶 71
關鍵術語 72
本章小結 72
測試題 72
編程練習題 72
第22章 開發高效算法 75
22.1 引言 75
22.2 使用大O符號來衡量算法效率 75
22.3 示例:確定大O 77
22.4 分析算法的時間復雜度 81
22.4.1 分析二分查找算法 81
22.4.2 分析選擇排序算法 81
22.4.3 分析漢諾塔問題 81
22.4.4 常用的遞推關係 82
22.4.5 比較常用的增長函數 82
22.5 使用動態編程計算斐波那契數 83
22.6 使用歐幾裏得算法求最大公約數 85
22.7 尋找素數的高效算法 89
22.8 使用分而治之法尋找最近的點對 94
22.9 使用迴溯法解決八皇後問題 97
22.10 計算幾何:尋找凸包 99
22.10.1 捲包裹算法 100
22.10.2 格雷厄姆算法 101
關鍵術語 102
本章小結 102
測試題 103
編程練習題 103
第23章 排序 109
23.1 引言 109
23.2 插入排序 110
23.3 冒泡排序 112
23.4 歸並排序 114
23.5 快速排序 117
23.6 堆排序 121
23.6.1 堆的存儲 122
23.6.2 添加一個新的結點 122
23.6.3 刪除根結點 123
23.6.4 Heap類 124
23.6.5 使用Heap類進行排序 126
23.6.6 堆排序的時間復雜度 127
23.7 桶排序和基數排序 128
23.8 外部排序 129
23.8.1 實現階段Ⅰ 131
23.8.2 實現階段Ⅱ 132
23.8.3 結閤兩個階段 133
23.8.4 外部排序復雜度 136
關鍵術語 136
本章小結 136
測試題 137
編程練習題 137
第24章 實現綫性錶、棧、隊列和優先隊列 141
24.1 引言 141
24.2 綫性錶的通用特性 141
24.3 數組綫性錶 144
24.4 鏈錶 151
24.4.1 結點 151
24.4.2 MyLinkedList類 153
24.4.3 實現MyLinkedList 154
24.4.4 MyArrayList和MyLinkedList 162
24.4.5 鏈錶的變體 162
24.5 棧和隊列 163
24.6 優先隊列 167
本章小結 168
測試題 169
編程練習題 169
第25章 二叉查找樹 171
25.1 引言 171
25.2 二叉查找樹 171
25.2.1 錶示二叉查找樹 172
25.2.2 查找一個元素 173
25.2.3 在BST中插入一個元素 173
25.2.4 樹的遍曆 174
25.2.5 BST類 176
25.3 刪除BST中的一個元素 184
25.4 樹的可視化和MVC 189
25.5 迭代器 192
25.6 示例學習:數據壓縮 194
關鍵術語 199
本章小結 199
測試題 199
編程練習題 199
第26章 AVL樹 203
26.1 引言 203
26.2 重新平衡樹 204
26.3 為AVL樹設計類 205
26.4 重寫insert方法 207
26.5 實現鏇轉 207
26.6 實現delete方法 208
26.7 AVLTree類 209
26.8 測試 AVLTree類 214
26.9 AVL樹的時間復雜度分析 216
關鍵術語 217
本章小結 217
測試題 217
編程練習題 217
第27章 散列 219
27.1 引言 219
27.2 什麼是散列 219
27.3 散列函數和散列碼 220
27.3.1 基本數據類型的散列碼 220
27.3.2 字符串類型的散列碼 221
27.3.3 壓縮散列碼 221
27.4 使用開放地址法處理衝突 222
27.4.1 綫性探測 222
27.4.2 二次探測法 223
27.4.3 再哈希法 224
27.5 使用鏈地址法處理衝突 225
27.6 裝填因子和再散列 226
27.7 使用散列實現映射錶 227
27.8 使用散列實現集閤 235
關鍵術語 241
本章小結 242
測試題 242
編程練習題 242
第28章 圖及其應用 244
28.1 引言 244
28.2 基本的圖術語 245
28.3 錶示圖 247
28.3.1 錶示頂點 247
28.3.2 錶示邊:邊數組 248
28.3.3 錶示邊:Edge對象 248
28.3.4 錶示邊:鄰接矩陣 249
28.3.5 錶示邊:鄰接綫性錶 249
28.4 圖建模 251
28.5 圖的可視化 261
28.6 圖的遍曆 263
28.7 深度優先搜索(DFS) 264
28.7.1 DFS的算法 264
28.7.2 DFS的實現 265
28.7.3 DFS的應用 267
28.8 示例學習:連通圓問題 268
28.9 廣度優先搜索(BFS) 270
28.9.1 BFS的算法 270
28.9.2 BFS的實現 271
28.9.3 BFS的應用 272
28.10 示例學習:9枚硬幣反麵問題 273
關鍵術語 278
本章小結 278
測試題 278
編程練習題 278
第29章 加權圖及其應用 283
29.1 引言 283
29.2 加權圖的錶示 284
29.2.1 加權邊的錶示:邊數組 284
29.2.2 加權鄰接矩陣 285
29.2.3 鄰接綫性錶 285
29.3 WeightedGraph類 286
29.4 最小生成樹 292
29.4.1 最小生成樹算法 293
29.4.2 完善Prim的MST算法 295
29.4.3 MST算法的實現 295
29.5 尋找最短路徑 298
29.6 示例學習:加權的9枚硬幣反麵問題 305
關鍵術語 308
本章小結 308
測試題 309
編程練習題 309
第30章 多綫程和並行程序設計 314
30.1 引言 314
30.2 綫程的概念 314
30.3 創建任務和綫程 315
30.4 Thread類 318
30.5 示例學習:閃爍的文本 320
30.6 綫程池 322
30.7 綫程同步 324
30.7.1 synchronized關鍵字 326
30.7.2 同步語句 327
30.8 利用加鎖同步 327
30.9 綫程間協作 329
30.10 示例學習:生産者/消費者 333
30.11 阻塞隊列 336
30.12 信號量 338
30.13 避免死鎖 339
30.14 綫程狀態 340
30.15 同步閤集 341
30.16 並行編程 342
關鍵術語 346
本章小結 346
測試題 347
編程練習題 347
第31章 網絡 350
31.1 引言 350
31.2 客戶端/服務器計算 351
31.2.1 服務器套接字 351
31.2.2 客戶端套接字 351
31.2.3 通過套接字進行數據傳輸 352
31.2.4 客戶端/服務器示例 353
31.3 InetAddress類 357
31.4 服務多個客戶 358
31.5 發送和接收對象 361
31.6 示例學習:分布式井字遊戲 365
關鍵術語 376
本章小結 376
測試題 376
編程練習題 376
第32章 Java數據庫程序設計 379
32.1 引言 379
32.2 關係型數據庫係統 379
32.2.1 關係結構 380
32.2.2 完整性約束 381
32.3 SQL 383
32.3.1 在MySQL上創建用戶賬戶 383
32.3.2 創建數據庫 384
32.3.3 創建和刪除錶 385
32.3.4 簡單插入、更新和刪除 386
32.3.5 簡單查詢 387
32.3.6 比較運算符和布爾運算符 387
32.3.7 操作符like、between-and和is null 388
32.3.8 列的彆名 388
32.3.9 算術運算符 389
32.3.10 顯示互不相同的記錄 389
32.3.11 顯示排好序的記錄 390
32.3.12 聯結錶 390
32.4 JDBC 391
32.4.1 使用JDBC開發數據庫應用程序 392
32.4.2 從JavaFX訪問數據庫 396
32.5 PreparedStatement 398
32.6 CallableStatement 400
32.7 獲取元數據 403
32.7.1 數據庫元數據 403
32.7.2 獲取數據庫錶 404
32.7.3 結果集元數據 405
關鍵術語 406
本章小結 406
測試題 407
編程練習題 407
第33章 JavaServer Faces 411
33.1 引言 411
33.2 開始使用JSF 411
33.2.1 創建一個JSF項目 412
33.2.2 一個基本的JSF頁麵 412
33.2.3 JSF的受管JavaBean 414
33.2.4 JSF錶達式 416
33.3 JSF GUI組件 418
33.4 處理錶單 421
33.5 示例學習:計算器 425
33.6 會話跟蹤 428
33.7 驗證輸入 430
33.8 將數據庫與facelet綁定 434
33.9 打開一個新的JSF頁麵 439
關鍵術語 445
本章小結 445
測試題 445
編程練習題 446
附錄A Java關鍵字 451
附錄B ASCII字符集 452
附錄C 操作符優先級錶 453
附錄D Java修飾符 454
附錄E 特殊浮點值 455
附錄F 數係 456
附錄G 位操作 460
附錄H 正則錶達式 461
附錄I 枚舉類型 465
前言/序言
Introduction to Java Programming, Comprehensive Version, Tenth Edition許多讀者就本書之前的版本給齣瞭很多反饋。這些評論和建議極大地改進瞭本書。這一版在錶述、組織、示例、練習題以及附錄方麵都進行瞭極大的增強,包括:
用JavaFX取代瞭Swing。JavaFX是一個用於開發Java GUI程序的新框架,它極大地簡化瞭GUI程序設計,比Swing更易於學習。
在GUI程序設計之前介紹異常處理、抽象類和接口,若教師選擇不教授GUI的內容,可以直接跳過第14~16章。
在第4章便開始介紹對象和字符題串,從而使得學生可以較早地使用對象和字符串來開發有趣的程序。
包含更多新的有趣示例和練習題 ,用於激發學生興趣。在配套網站(www.cs. armstrong.edu/liang/intro10e/或www.pearsonhighered.com/liang)上還為教師提供瞭100多道編程練習題。
本書采用基礎優先的方法,在設計自定義類之前,首先介紹基本的程序設計概念和技術。選擇語句、循環、方法和數組這樣的基本概念和技術是程序設計的基礎,它們為學生進一步學習麵嚮對象程序設計和高級Java程序設計做好準備。
本書以問題驅動的方式來教授程序設計,將重點放在問題的解決而不是語法上。我們通過使用在各種應用情景中引發思考的問題,使得程序設計的介紹也變得更加有趣。前麵章節的主綫放在問題的解決上,引入閤適的語法和庫以支持編寫解決問題的程序。為瞭支持以問題驅動的方式來教授程序設計,本書提供瞭大量不同難度的問題來激發學生的積極性。為瞭吸引各個專業的學生來學習,這些問題涉及很多應用領域,包括數學、科學、商業、金融、遊戲、動畫以及多媒體等。
本書將程序設計、數據結構和算法無縫集成在一起,采用一種實用性的方式來教授數據結構。首先介紹如何使用各種數據結構來開發高效的算法,然後演示如何實現這些數據結構。通過實現,學生獲得關於數據結構效率,以及如何和何時使用某種數據結構的深入理解。最後,我們設計和實現瞭針對樹和圖的自定義數據結構。
本書廣泛應用於全球各大學的程序設計入門、數據結構和算法課程中。完全版包括程序設計基礎、麵嚮對象程序設計、GUI程序設計、數據結構、算法、並行、網絡、數據庫和Web程序設計。這個版本旨在把學生培養成精通Java的程序員。基礎篇可用於程序設計的第一門課程(通常稱為CS1)。基礎篇包含完全版的前18章內容,前13章適閤準備AP計算機科學考試(AP Computer Science Exam)的人員使用。
教授編程的最好途徑是通過示例,而學習編程的唯一途徑是通過動手練習。本書通過示例對基本概念進行瞭解釋,提供瞭大量不同難度的練習題供學生進行實踐。在我們的程序設計課程中,每次課後都布置瞭編程練習。
我們的目標是編寫一本可以通過各種應用場景中的有趣示例來教授問題求解和程序設計的教材。如果您有任何關於如何改進本書的評論或建議,請通過以下方式與我聯係。
Y. Daniel Liangy.daniel.liang@gmail.comwww.cs.armstrong.edu/liangwww.pearsonhighered.com/liang本版新增內容本版對各個細節都進行瞭全麵修訂,以增強其清晰性、錶述、內容、例子和練習題。本版主要的改進如下:
更新到Java 8版本。
由於Swing被JavaFX所替代,因此所有的GUI示例和練習題都使用JavaFX改寫。
使用lambda錶達式來簡化JavaFX和綫程中的編程。
在配套網站上為教師提供瞭100多道編程練習題,並給齣瞭答案。這些練習題沒有齣現在教材中。
在第4章就引入瞭數學方法,使得學生可以使用數學函數編寫代碼。
在第4章就引入瞭字符串,使得學生可以早點使用對象和字符串開發有趣的程序。
GUI編程放在抽象類和接口之後介紹,若教師選擇不教授GUI內容的話,可以直接跳過這些章節。
第4、14、15和16章是全新的章節。
第28和29章大幅改寫,對最小生成樹和最短路徑使用更加簡化的方法實現。
教學特色本書使用以下要素組織素材:
教學目標 在每章開始處列齣學生應該掌握的內容,學完這章後,學生能夠判斷自己是否達到這個目標。
引言 提齣代錶性的問題,以便學生對該章內容有一個概括瞭解。
要點提示 突齣每節中涵蓋的重要概念。
復習題 按節組織,幫助學生復習相關內容並評估掌握的程度。
示例學習 通過精心挑選示例,以容易理解的方式教授問題求解和程序設計概念。本書使用多個小的、簡單的、激發興趣的例子來演示重要的概念。
本章小結 迴顧學生應該理解和記住的重要主題,有助於鞏固該章所學的關鍵概念。
測試題 測試題是在綫的,讓學生對編程概念和技術進行自我測試。
編程練習題 為學生提供獨立應用所學新技能的機會。練習題的難度分為容易(沒有星號)、適中(*)、難(**)和具有挑戰性(***)四個級彆。學習程序設計的竅門就是實踐、實踐、再實踐。所以,本書提供瞭大量的編程練習題。
注意、提示、警告和設計指南 貫穿全書,對程序開發的重要方麵提供有價值的建議和見解。
注意 提供學習主題的附加信息,鞏固重要概念。
提示 教授良好的程序設計風格和實踐經驗。
警告 幫助學生避開程序設計錯誤的誤區。
設計指南 提供設計程序的指南。
靈活的章節順序本書提供靈活的章節順序,使學生可以或早或
Java語言程序設計(進階篇)(原書第10版) epub pdf mobi txt 電子書 下載 2024
Java語言程序設計(進階篇)(原書第10版) 下載 epub mobi pdf txt 電子書