前 言Introduction to Java Programming and Data Structures, Comprehensive Version, Eleventh Edition许多读者就本书之前的版本给出了很多反馈。这些评论和建议极大地改进了本书。这一版在表述、组织、示例、练习题以及附录方面都有大幅提高。
本书采用基础优先的方法,在设计用户自定义类之前,首先介绍基本的程序设计概念和技术。选择语句、循环、方法和数组这样的基本概念和技术是程序设计的基础,它们为学生进一步学习面向对象程序设计和高级Java程序设计做好准备。
本书以问题驱动的方式来教授程序设计,将重点放在问题的解决而不是语法上。我们通过使用在各种应用情景中引发思考的问题,使得程序设计的介绍变得更加有趣。前面章节的主线放在问题的解决上,引入合适的语法和库以支持编写解决问题的程序。为了支持以问题驱动的方式来教授程序设计,本书提供了大量不同难度的问题来激发学生的积极性。为了吸引各个专业的学生来学习,这些问题涉及很多应用领域,包括数学、科学、商业、金融、游戏、动画以及多媒体等。
本书将程序设计、数据结构和算法无缝整合在一起,采用一种实用的方式来教授数据结构。首先介绍如何使用各种数据结构来开发高效的算法,然后演示如何实现这些数据结构。通过实现,学生可以深入理解数据结构的效率,以及如何和何时使用某种数据结构。最后,我们设计和实现了针对树和图的用户自定义数据结构。
本书广泛应用于全球各大学的程序设计入门、数据结构和算法课程中。完全版包括程序设计基础、面向对象程序设计、GUI程序设计、数据结构、算法、并行、网络、数据库和Web程序设计。这个版本旨在把学生培养成精通Java的程序员。基础篇可用于程序设计的第一门课程(通常称为CS1)。基础篇包含完全版的前18章内容,本书还有一个AP版本,适合学习AP计算机科学(AP Computer Science)课程的高中生使用。
教授编程的最好途径是通过示例,而学习编程的唯一途径是通过动手练习。本书通过示例对基本概念进行了讲解,并提供了大量不同难度的练习题供学生进行练习。在我们的程序设计课程中,每次课后都布置了编程练习。
我们的目标是编写一本可以通过各种应用场景中的有趣示例来教授问题求解和程序设计的教材。如果您有任何关于如何改进本书的评论或建议,请给我发邮件。
Y. Daniel
[email protected]/liangwww.pearsonhighered.com/liangACM/IEEE课程体系2013版和ABET课程评价新的ACM/IEEE课程体系2013版将知识体系组织成18个知识领域。为了帮助教师基于本书设计课程,我们提供了示例教学大纲来确定知识领域和知识单元。作为一个常规的定制示例,示例教学大纲用于三学期的课程系列。示例教学大纲可以从教师资源配套网站获取。
许多读者来自ABET认证计划。ABET认证的一个关键组成部分是,通过针对课程效果的持续的课程评价确定薄弱环节。我们在教师资源配套网站中提供了课程效果示例,以及用于衡量课程效果的示例考试。
本版新增内容本版对各个细节都进行了全面修订,以增强其清晰性、表述、内容、示例和练习题。本版主要的改进如下:
书名改为了“Java语言程序设计与数据结构”,以体现在数据结构方面的增强。本书使用一种实用的方式来介绍、实现和使用数据结构,并涵盖了一门典型的数据结构课程中的所有主题。另外,还提供了额外的奖励章节来介绍高级的数据结构,比如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.com/liang,获得和前一版本的关联以及新特征的完整列表。
教学特色本书使用以下要素组织素材:
教学目标:在每章开始列出学生学习本章应该掌握的内容,学完这章后,学生能够判断自己是否达到这个目标。
引言:提出引发思考的问题以展开讨论,激发读者深入探讨该章内容。
要点提示:突出每节中涵盖的重要概念。
复习题:按节组织,帮助学生复习相关内容并评估掌握的程度。
示例学习:通过精心挑选示例,以容易理解的方式教授问题求解和程序设计概念。本书使用多个小的、简单的、激发兴趣的例子来演示重要的概念。
本章小结:回顾学生应该理解和记住的重要主题,有助于巩固该章所学的关键概念。
测试题:可以在线访问,按照章节组织,让学生可以就编程概念和技术进行自我测试。
编程练习题:按章节组织,为学生提供独立应用所学新技能的机会。练习题的难度分为容易(没有星号)、适度(*)、难(**)和具有挑战性(***)四个级别。学习程序设计的窍门就是实践、实践、再实践。所以,本书提供了大量的编程练习题。另外,在教师资源网站上为教师提供了200多道带有答案的编程练习题。
注意、提示、警告和设计指南:贯穿全书,对程序开发的重要方面提供有价值的建议和见解。
注意:提供学习主题的附加信息,巩固重要概念。
提示:教授良好的程序设计风格和实践经验。
警告:帮助学生避开程序设计错误的误区。
设计指南:提供设计程序的指南。
灵活的章节顺序本书提供灵活的章节顺序,使GUI、异常处理、递归、泛型和Java集合框架等内容可以或早或晚地讲解。下页的插图显示了各章之间的相关性。
本书的组织所有的章节分为五部分,构成Java程序设计、数据结构和算法、数据库和Web程序设计的全面介绍。书中知识是循序渐进的,前面的章节介绍了程序设计的基本概念,并且通过简单的例子和练习题引导学生;后续的章节逐步详细地介绍Java程序设计,最后介绍开发综合的Java应用程序。附录包含数系、位操作、正则表达式以及枚举类型等多种主题。
第一部分 程序设计基础(第1~8章)本书第一部分是基石,让你开始踏上Java学习之旅。你将了解Java(第1章),还将学习像基本数据类型、变量、常量、赋值、表达式以及操作符这样的基本程序设计技术(第2章),选择语句(第3章),数学函数、字符和字符串(第4章),循环(第5章),方法(第6章),数组(第7和8章)。在第7章之后,可以跳到第18章去学习如何编写递归的方法来解决本身具有递归特性的问题。
第二部分 面向对象程序设计(第9~13章和第17章)这一部分介绍面向对象程序设计。Java是一种面向对象程序设计语言,它使用抽象、封装、继承和多态来提供开发软件的极大灵活性、模块化和可重用性。你将学习如何使用对象和类(第9和10章)、类的继承(第11章)、多态性(第11章)、异常处理(第12章)、抽象类(第13章)以及接口(第13章)进行程序设计。文本I/O将在第12章介绍,二进制I/O将在第17章介绍。
第三部分 GUI程序设计(第14~16章和奖励章节第31章)JavaFX是一个开发Java GUI程序的新框架。它不仅对于开发GUI程序有用,还是一个用于学习面向对象程序设计的优秀教学工具。这一部分在第14~16章介绍使用JavaFX进行Java GUI程序设计。主要的主题包括GUI基础(第14章)、容器面板(第14章)、绘制形状(第14章)、事件驱动编程(第15章)、动画(第15章)、GUI组件(第16章),以及播放音频和视频(第16章)。你将学习采用JavaFX的GUI程序架构,并且使用组件、形状、面板、图像和视频来开发有用的应用程序。第31章涵盖JavaFX的高级特性。
第四部分 数据结构和算法(第18~30章以及奖励章节第42和43章)这一部分介绍一门典型的数据结构和算法课程中的主题。第18章介绍递归以编写解决本身具有递归特性的问题的方法。第19章介绍泛型是如何提高软件的可靠性的。第20和21章介绍Java集合框架,它为数据结构定义了一套有用的API。第22章讨论算法效率的度量以便为应用程序选择合适的算法。第23章介绍经典的排序算法。你将在第24章中学到如何实现经典的数据结构,如线性表、队列和优先队列。第25和26章介绍二分查找树和AVL树。第27章介绍散列以及通过散列实现映射(map)和集合(set)。第28和29章介绍图的应用。第30章介绍用于集合流的聚合操作。2-4树、B树以及红黑树在奖励章节第42和43章中介绍。
第五部分 高级Java程序设计(奖励章节第32~41章和第44章)这一部分介绍高级Java程序设计。第32章介绍使用多线程使程序具有更好的响应性和交互性,并介绍并行编程。第33章讨论如何编写程序使得Internet上的不同主机能够相互对话。第34章介绍使用Java来开发数据库项目。第35章深入探讨高级Java数据库编程。第36章涵盖国际化支持的使用,以开发面向全球使用者的项目。第37和38章介绍如何使用Java servlet和JSP创建来自Web服务器的动态内容。第39章介绍使用JSF进行现代Web应用开发。第40章介绍远程方法调用,而第41章讨论Web服务。第44章介绍使用JUnit测试Java程序。
附录附录A列出Java关键字。附录B给出十进制和十六进制ASCII字符集。附录C给出操作符优先级。附录D总结Java修饰符及其使用。附录E讨论特殊的浮点值。附录F介绍数系以及二进制、十进制和十六进制间的转换。附录G介绍位操作符。附录H介绍正则表达式。附录I涵盖枚举类型。