新書推薦:
《
纯数学教程
》
售價:NT$
390.0
《
威尔士史:历史与身份的演进
》
售價:NT$
490.0
《
黄金、石油和牛油果:16件商品中的拉丁美洲发展历程
》
售價:NT$
395.0
《
母亲的选择:看不见的移民保姆与女性工作
》
售價:NT$
340.0
《
城邦政治与灵魂政治——柏拉图《理想国》中的政治哲学研究
》
售價:NT$
590.0
《
3分钟漫画墨菲定律:十万个为什么科普百科思维方式心理学 胜天半子人定胜天做事与成事的权衡博弈之道
》
售價:NT$
249.0
《
1911:危亡警告与救亡呼吁
》
售價:NT$
349.0
《
旷野人生:吉姆·罗杰斯的全球投资探险
》
售價:NT$
345.0
內容簡介:
本书是Java语言的经典教材,多年来畅销不衰。本书全面整合了Java 8的特性,采用“基础优先,问题驱动”的教学方式,循序渐进地介绍了程序设计基础、解决问题的方法、面向对象程序设计、图形用户界面设计、异常处理、IO和递归等内容。此外,本书还全面且深入地覆盖了一些高级主题,包括算法和数据结构、多线程、网络、国际化、高级GUI等内容。
關於作者:
梁勇(Y. Daniel Liang) 现为阿姆斯特朗亚特兰大州立大学计算机科学系教授。之前曾是普度大学计算机科学系副教授,并曾两次获得普度大学杰出研究奖。他所编写的Java教程在美国大学Java课程中采用率极高,同时他还兼任Prentice Hall Java系列丛书的编辑。他是“Java Champion”荣誉得主,并在世界各地给在校学生和程序员做Java语言及技术方面的讲座。
目錄 :
第19章 泛型1
19.1 引言2
19.2 动机和优点2
19.3 定义泛型类和接口4
19.4 泛型方法6
19.5 示例学习:对一个对象数组进行排序8
19.6 原生类型和向后兼容10
19.7 通配泛型11
19.8 泛型的擦除和限制14
19.9 示例学习:泛型矩阵类16
第20章 线性表、栈、队列和优先队列25
20.1 引言26
20.2 集合26
20.3 迭代器30
20.4 使用forEach方法31
20.5 线性表32
20.6 Comparator接口37
20.7 线性表和集合的静态方法41
20.8 示例学习:弹球44
20.9 向量类和栈类48
20.10 队列和优先队列49
20.11 示例学习:表达式求值53
第21章 规则集和映射65
21.1 引言66
21.2 规则集66
21.3 比较规则集和线性表的性能74
21.4 示例学习:关键字计数77
21.5 映射78
21.6 示例学习:单词的出现次数83
21.7 单元素与不可变的集合和映射85
第22章 开发高效算法89
22.1 引言90
22.2 使用大O标记来衡量算法效率90
22.3 示例:确定大O92
22.4 分析算法的时间复杂度96
22.5 使用动态编程寻找斐波那契数99
22.6 使用欧几里得算法求最大公约数101
22.7 寻找素数的高效算法105
22.8 使用分而治之法寻找最近点对111
22.9 使用回溯法解决八皇后问题114
22.10 计算几何:寻找凸包117
第23章 排序131
23.1 引言132
23.2 插入排序132
23.3 冒泡排序 134
23.4 归并排序137
23.5 快速排序140
23.6 堆排序144
23.7 桶排序和基数排序151
23.8 外部排序153
第24章 实现线性表、栈、队列和优先队列167
24.1 引言168
24.2 线性表的通用操作168
24.3 数组线性表172
24.4 链表179
24.5 栈和队列193
24.6 优先队列197
第25章 二叉搜索树203
25.1 引言204
25.2 二叉搜索树204
25.3 删除BST中的一个元素217
25.4 树的可视化和MVC223
25.5 迭代器226
25.6 示例学习:数据压缩228
第26章 AVL树239
26.1 引言240
26.2 重新平衡树240
26.3 为AVL树设计类243
26.4 重写insert方法244
26.5 实现旋转245
26.6 实现delete方法246
26.7 AVLTree类246
26.8 测试 AVLTree类252
26.9 AVL树的时间复杂度分析255
第27章 散列259
27.1 引言260
27.2 什么是散列260
27.3 散列函数和散列码261
27.4 使用开放地址法处理冲突263
27.5 使用分离链接法处理冲突267
27.6 装填因子和再散列267
27.7 使用散列实现映射269
27.8 使用散列实现规则集278
第28章 图及其应用289
28.1 引言290
28.2 基本的图术语291
28.3 表示图292
28.4 图的建模298
28.5 图的可视化308
28.6 图的遍历311
28.7 深度优先搜索312
28.8 示例学习:连通圆问题316
28.9 广度优先搜索318
28.10 示例学习:9枚硬币反面问题321
第29章 加权图及其应用335
29.1 引言336
29.2 加权图的表示337
29.3 WeightedGraph类339
29.4 最小生成树347
29.5 寻找最短路径353
29.6 示例学习:加权的9枚硬币反面问题362
第30章 集合流的聚合操作373
30.1 引言374
30.2 流管道374
30.3 IntStream、LongStream和DoubleStream380
30.4 并行流383
30.5 使用reduce方法进行流的归约385
30.6 使用collect方法进行流的归约388
30.7 使用groupingBy收集器进行元素分组391
30.8 示例学习394
附录A Java关键字405
附录B ASCII字符集406
附录C 操作符优先级表408
附录D Java修饰符410
附录E 特殊浮点值412
附录F 数系413
附录G 位操作符417
附录H 正则表达式418
附录I 枚举类型423
Contents
chapter 19 generics 1
19.1 Introduction 2
19.2 Motivations and Benefits 2
19.3 Defining Generic Classes and Interfaces 4
19.4 Generic Methods 6
19.5 Case Study: Sorting an Array of Objects 8
19.6 Raw Types and Backward Compatibility 10
19.7 Wildcard Generic Types 11
19.8 Erasure and Restrictions on Generics 14
19.9 Case Study: Generic Matrix Class 16
chapter 20 Lists, Stacks, Queues, and Priority Queues 25
20.1 Introduction 26
20.2 Collections 26
20.3 Iterators 30
20.4 Using the forEach Method 31
20.5 Lists 32
20.6 The Comparator Interface 37
20.7 Static Methods for Lists and Collections 41
20.8 Case Study: Bouncing Balls 44
20.9 Vector and Stack Classes 48
20.10 Queues and Priority
內容試閱 :
许多读者就本书之前的版本给出了很多反馈。这些评论和建议极大地改进了本书。这一版在表述、组织、示例、练习题以及附录方面都有大幅提高。
本书采用基础优先的方法,在设计用户自定义类之前,首先介绍基本的程序设计概念和技术。选择语句、循环、方法和数组这样的基本概念和技术是程序设计的基础,它们为学生进一步学习面向对象程序设计和高级Java程序设计做好准备。
本书以问题驱动的方式来教授程序设计,将重点放在问题的解决而不是语法上。我们通过使用在各种应用情景中引发思考的问题,使得程序设计的介绍变得更加有趣。前面章节的主线放在问题的解决上,引入合适的语法和库以支持编写解决问题的程序。为了支持以问题驱动的方式来教授程序设计,本书提供了大量不同难度的问题来激发学生的积极性。为了吸引各个专业的学生来学习,这些问题涉及很多应用领域,包括数学、科学、商业、金融、游戏、动画以及多媒体等。
本书将程序设计、数据结构和算法无缝整合在一起,采用一种实用的方式来教授数据结构。首先介绍如何使用各种数据结构来开发高效的算法,然后演示如何实现这些数据结构。通过实现,学生可以深入理解数据结构的效率,以及如何和何时使用某种数据结构。最后,我们设计和实现了针对树和图的用户自定义数据结构。
本书广泛应用于全球各大学的程序设计入门、数据结构和算法课程中。完全版包括程序设计基础、面向对象程序设计、GUI程序设计、数据结构、算法、并行、网络、数据库和Web程序设计。这个版本旨在把学生培养成精通Java的程序员。基础篇可用于程序设计的第一门课程(通常称为CS1)。基础篇包含完全版的前18章内容,本书还有一个AP版本,适合学习AP计算机科学(AP Computer Science)课程的高中生使用。
教授编程的最好途径是通过示例,而学习编程的唯一途径是通过动手练习。本书通过示例对基本概念进行了讲解,并提供了大量不同难度的练习题供学生进行练习。在我们的程序设计课程中,每次课后都布置了编程练习。
我们的目标是编写一本可以通过各种应用场景中的有趣示例来教授问题求解和程序设计的教材。如果您有任何关于如何改进本书的评论或建议,请给我发邮件。
Y. Daniel Liang
y.daniel.liang@gmail.com
www.cs.armstrong.eduliang
www.pearsonhighered.comliang
ACMIEEE课程体系2013版和ABET课程评价
新的ACMIEEE课程体系2013版将知识体系组织成18个知识领域。为了帮助教师基于本书设计课程,我们提供了示例教学大纲来确定知识领域和知识单元。作为一个常规的定制示例,示例教学大纲用于三学期的课程系列。示例教学大纲可以从教师资源配套网站获取。
许多读者来自ABET认证计划。ABET认证的一个关键组成部分是,通过针对课程效果的持续的课程评价确定薄弱环节。我们在教师资源配套网站中提供了课程效果示例,以及用于衡量课程效果的示例考试。
本版新增内容
本版对各个细节都进行了全面修订,以增强其清晰性、表述、内容、示例和练习题。本版主要的改进如下:
书中新增了“数据结构”方面的内容。本书使用一种实用的方式来介绍、实现和使用数据结构,并涵盖了一门典型的数据结构课程中的所有主题。另外,还提供了额外的奖励章节来介绍高级的数据结构,比如2-4树、B树以及红黑树等。
针对最新的Java技术进行了更新。使用Java 8版本中的新特征对示例和练习进行了改进和简化。
在第13章的接口介绍中,引入了默认方法和静态方法。
GUI相关章节都更新到JavaFX 8。改写了所有示例。示例和练习中的用户界面现在都是可以改变尺寸并且居中显示的。
在第15章的示例中,涵盖了内部类、匿名内部类以及lambda表达式的内容。
数据结构相关章节中,更多的示例和练习采用了lambda表达式来简化编程。方法引用在20.6节介绍Comparator接口时进行了介绍。
在第20章中介绍了forEach方法,作为对集合中每个元素应用一个动作而进行的循环的简单替代方法。
在第24~29章中,使用了Java 8中接口的默认方法重新设计和简化了MyList、MyArrayList、MyLinkedList、Tree、BST、AVLTree、MyMap、MyHashMap、MySet、MyHashSet、Graph、UnweightedGraph和WeightedGraph的实现。
第30章为全新章节,介绍集合流的聚合操作。
第31章(奖励章节)介绍了FXML和Scene Builder可视化工具。
重新设计了配套网站,增加了新的交互式测试题、复习题、动画以及现场编程。
在教师资源网站上为教师额外提供了200多道编程练习题,并给出了答案。这些练习题没有出现在教材中。
可以访问www.pearsonhighered.comliang,获得和前一版本的关联以及新特征的完整列表。
教学特色
本书使用以下要素组织素材:
教学目标:在每章开始列出学生学习本章应该掌握的内容,学完这章后,学生能够判断自己是否达到这个目标。
引言:提出引发思考的问题以展开讨论,激发读者深入探讨该章内容。
要点提示:突出每节中涵盖的重要概念。
复习题:按节组织,帮助学生复习相关内容并评估掌握的程度。
示例学习:通过精心挑选示例,以容易理解的方式教授问题求解和程序设计概念。本书使用多个小的、简单的、激发兴