译 者 序
程序设计和数据结构是计算机科学的重要理论基础,也是计算机科学专业的核心课程。本书是计算机核心课程系列的经典教材,分为两部分:Java编程基础和数据结构的Java设计与实现,专为两学期的课程设计。本书前后两部分内容的连贯性与一致性,实现了两门课程的完美衔接,语言简洁,分析透彻合理,讲解清晰,使学生能得心应手地运用所学的Java基础知识,设计实现复杂的数据结构。
在第一部分,借鉴了行业领先的Java软件解决方案,给出了学习Java的最佳资料。本书根据程序设计的要素来组织,共分10章,分别介绍了Java的开发环境、数据与表达式、类与对象、条件与循环、类、图形用户界面、数组、继承、多态和异常等。
在第二部分,涉及集合和数据结构的构建,共分16章,分别介绍了算法分析、栈、队列、列表、迭代器、递归、搜索与排序、树、二叉搜索树、堆与优先级队列、集与映射、多路搜索树、图、数据库和JavaFX。
本书内容严谨,组织合理,不仅学习内容脉络清晰,还是对编程概念的全面性、连贯性和无缝连接性的有益探索。另外,本书专业性强,提供了大量真实的代码,给出了许多实用的程序示例。本书的另一特色是课后的练习和程序设计项目,能进一步提升学生对课本内容的理解,印证所学习内容,将刻板的书本知识,转化成学生自身的编程能力。
在本书翻译的过程中,译者融会贯通,深刻体会,掌握作者的思想脉络,达到翻译透彻,忠实于原著。
感谢清华大学出版社的编辑龙启铭先生,在我翻译过程中给予的帮助、建议与支持。
感谢为本书出版做出贡献的每一位参与者,感谢他们付出的真心和努力。
鉴于译者的能力有限,译文难免会出现纰漏,请各位同行和专家批评指正。
译者
2019年8月
前 言
欢迎开启Java学习之旅。本书是程序设计课程和数据结构课程的组合,所以由两部分组成,第一部分是Java编程基础;第二部分是复杂数据结构的Java语言程序设计与实现。本书是计算机入门课程系列的经典教材,学习时限为两个学期。因为本书的两部分内容采用统一的方法进行编写,所以使Java的基础知识与实现完美衔接。学生在使用本教材时,能更加真实地感知两门课程间的无缝连接,前后内容的连贯性与一致性,也能使学生更加得心应手地运用所学的Java基础知识,设计实现复杂的数据结构。
本书借鉴行业领先的Java软件解决方案,找出学习Java的最佳资料,从而使重新修订的第4版图书内容更加丰富,设计与实现更接地气。例如,本书不是零散地在许多章节中介绍图形用户界面,而是用单独的一章全面地介绍图形用户界面。
在后面的章节中,本书也是在介绍Java软件结构之后,才涉及集合和数据结构的构建。这样做不仅使学习内容脉络更加清晰,还是对编程概念的全面性、连贯性和无缝连接性的有益探索。
第4版新特色
值得欣慰的是,我们收到了关于第3版图书的许多反馈意见。为了更好地为读者服务,使本书成为更经典的计算机课程的入门教材,我们对第3版图书的相关主题进行了修改和完善,具体内容如下:
* 新增加了一章:第26章JavaFX。
* 在第18章中增加了动画演示应用程序:即用动画演示各类排序算法,从而使读者能直观地比较不同算法的效率。
* 在新的排序动画演示示例中,增加了线程处理的介绍。
* 增加了一节:Comparable接口的使用。
* 修订了关于二叉搜索树的讨论,从而使讨论内容更加丰富。
根据读者的反馈意见,我们保留了原来Swing的相关内容,增加了一章JavaFX。也就是说,我们并没有用JavaFX完全替换Swing。我们知道,随着技术的进步,JavaFX终将会取代Swing。但就目前而言,由于基于Swing的代码数量之多,所以在特定时间段内,Swing知识还是非常重要的。
在第3版中,我们所讨论集合的相关内容脉络如下:
反馈意见表明,这种学习方法得到了读者的一致好评,因此,第4版除了继续保留这部分内容之外,还要将其发扬光大。第4版进一步阐明了Java API支持特定集合的方式与从零开始实现之间的区别。因此,教师能轻松地以比较和对比的方式指出API实现的限制。同时,这种学习方法还允许教师就事论事,根据所需,只简单地介绍集合而无须探讨实现细节。
第4版的修订是建立在前面版本所构建的强有力的教学法基础之上,为教师提供更多的选择机会。不同的教师,可以根据自己的授课内容,选择不同的主题。因此,第4版使教师能更灵活地把控自己的授课内容。
内容解析
第1章(绪论)介绍Java程序设计语言和程序开发基础,内容涵盖面向对象开发的相关概念和术语。该章是介绍性内容,旨在使学生熟悉Java开发环境。
第2章(数据与表达式)探讨Java编程所需的基本数据类型,执行运算所用的表达式,数据类型之间的转换以及借助Scanner类实现对用户交互输入数据的读取。
第3章(使用类和对象)探讨预定义类的使用和基于预定义类创建对象。类和对象主要用于处理字符串,生成随机数,执行复杂计算和格式化输出。此外,还讨论包、枚举类型和包装类。
第4章(条件与循环)介绍如何用布尔表达式进行判断。该章讨论所有与条件和循环相关的语句,包括for循环的增强版,介绍用Scanner类对迭代输入进行解析和读取文本 文件。
第5章(编写类)探讨与编写类和方法相关的问题,主题包括实例数据、可见性、范围、方法参数和返回类型。该章介绍构造函数、方法设计、静态数据和方法重载,也介绍测试与调试。
第6章(图形用户界面)探讨Java GUI的处理,重点是组件、事件和监听器。该章借助大量的GUI示例,具体讨论各种类型的组件和事件。同时,还介绍布局管理器、容器的层次结构、边框、提示工具和助记符。
第7章(数组)介绍数组和数组的处理。该章所涉及的主题包括边界检查、初始化器列表、命令行参数、变长参数列表和多维数组。
第8章(继承)介绍类派生、类的层次结构、覆盖和可见性等相关概念。该章的重点是正确使用继承,并要求学生了解继承在软件设计中的作用。
第9章(多态)探讨绑定的概念,绑定与多态之间的关系;分析如何使用继承或接口实现多态引用。此外,该章还分析多态设计问题。
第10章(异常)介绍异常处理,未捕获异常产生的影响,分析try-catch语句,讨论异常的传播。该章还探讨在处理输入和输出时如何使用异常,重点分析写入文本文件的示例。
第11章(算法分析)给出分析算法效率的基石,给出开发人员比较算法的重要标准和方法。该章的重点不是数学公式和推导,而是理解算法相关的重要概念。
第12章(集合与栈)介绍集合的概念,强调将接口与实现分离的需求。本章还在概念层面介绍栈,探讨基于数组的栈的实现。
第13章(链式结构与栈)讨论使用引用来创建链式数据结构,探讨链表管理的基本问题,并使用底层链式数据结构(参见第3章)定义栈的替代实现。
第14章(队列)探讨队列的概念,实现先进先出队列,以基数排序为例使队列内容形象化。最后,讨论基于底层链表、定长数组和循环数组的队列实现。
第15章(列表)介绍3种类型的列表:有序列表、无序列表和索引列表。本章对这3种类型列表进行比较和对比,讨论它们的共享操作和每种列表的独有操作。在设计各种不同类型列表时,用户都可以使用继承。列表既可以用数组实现,也可以用链表实现。
第16章(迭代器)是新增加的一章。该章介绍迭代器的概念和实现。对集合而言,迭代器非常重要。本章的扩展讨论部分进一步探讨将迭代器功能与任何特定集合细节分开的需求。
第17章(递归)介绍递归的概念,优秀的递归解决方案,递归的实现细节。该章还分析了递归算法的基本思想。
第18章(搜索与排序)讨论线性搜索算法和二分搜索算法;分析一些排序算法,如选择排序、插入排序、冒泡排序、快速排序和合并排序。该章的重点是搜索和排序的编程问题,比如比较对象要用Comparable接口。该章用动画程序演示排序算法的效率。当然,对比较器接口的分析与演示也非常到位。
第19章(树)概括介绍树、树的重要术语和概念。该章讨论树的各种实现方法,使用二叉树来表示计算算术表达式。
第20章(二叉搜索树)据第10章所介绍的树的基本概念,定义经典的二叉搜索树。该章先分析二叉搜索树的链式实现,之后讨论树节点的平衡对树的性能所产生的影响,最后进一步探讨二叉树的AVL实现和红/黑二叉树的实现。
第21章(堆与优先队列)探讨堆的概念、使用和实现,特别介绍堆与优先队列的关系。该章给出堆排序的示例,用以证明堆的实用性。此外,还介绍堆的链式实现和数组实现。
第22章(集与映射)探讨集合的两种类型,即集和映射,强调集和映射对JavaCollections API的重要性。
第23章(多路搜索树)是前几章讨论的自然延伸,分析2-3树、2-4树和通用B树。此外,还讨论各种树的实现。
第24章(图)介绍无向图和有向图的概念,与图相关的重要术语。该章还分析一些常见的图算法,讨论图的实现,详细分析图的邻接矩阵实现。
第25章(数据库)先探讨数据库的概念、管理以及SQL查询的基本原理,之后探讨了连接Java程序与数据库的技术,最后介绍与数据库交互所用到的API。
第26章(JavaFX)先介绍多个GUI和图形的示例,这些示例都使用新的JavaFX框架,之后介绍一些JavaFX元素,对Swing和JavaFX的方法进行了比较,最后,分析JavaFX场景生成器应用。
补充资料
本书为学生提供的资源如下:
* 提供本书所有程序的源代码;
* 提供选择本书主题的视频提示。
通过访问网址:www.pearsonhighered.com/cs-resources,学生可获取上述资源。
在培生教育的教师资源中心,教师可以找到如下资源:
* 本书的练习题答案和编程项目源代码;
* 本书的PPT讲义;
* 题库。
教师可以通过访问网址:www.pearsonhighered.com/irc获取上述资源;也可以发信至longqm@163.com获得上述资源。