图书>教材>本科教材>工学门类>计算机程序设计
Java语言程序设计(进阶篇)(原书第12版)

Java语言程序设计(进阶篇)(原书第12版)"

作者:[美]梁勇(Y.DanielLiang)
ISBN:978-7-111-68935-5
定价:¥139.0
字数:500千字
页数:
出版时间:2021-09-14
开本:16
版次:
装帧:平装
出版社:机械工业出版社
简介

本书是Java语言的经典教材,中文版分为基础篇和进阶篇,主要介绍程序设计基础、面向对象程序设计、GUI程序设计、数据结构和算法、高级Java程序设计等内容。本书通过示例讲解问题求解技巧,提供大量的程序清单,每章配有丰富的复习题和编程练习题,帮助读者掌握编程技术,并学会应用所学技术解决实际开发中遇到的问题。进阶篇主要讨论数据结构和算法,包括线性表、栈、队列、规则集、映射、排序、树和图等内容。本书可作为高等院校计算机相关专业程序设计课程的教材,也可作为Java语言及编程爱好者的参考资料。

前言

目录

中文版序<br/>译者序<br/>前言<br/>第19章 泛型 1<br/>19.1 引言 1<br/>19.2 动机和优点 1<br/>19.3 定义泛型类和接口 4<br/>19.4 泛型方法 5<br/>19.5 示例学习:对一个对象数组进行排序 7<br/>19.6 原生类型和向后兼容 8<br/>19.7 通配泛型 10<br/>19.8 泛型的擦除和限制 12<br/>19.9 示例学习:泛型矩阵类 15<br/>关键术语 19<br/>本章小结 19<br/>测试题 20<br/>编程练习题 20<br/>第20章 线性表、栈、队列和优先队列 22<br/>20.1 引言 22<br/>20.2 集合 23<br/>20.3 迭代器 26<br/>20.4 使用forEach方法 27<br/>20.5 线性表 28<br/>20.5.1 List接口中的通用方法 28<br/>20.5.2 ArrayList和LinkedList类 30<br/>20.6 Comparator接口 32<br/>20.7 用于线性表和集合的静态方法 36<br/>20.8 示例学习:弹球 40<br/>20.9 向量类和栈类 43<br/>20.10 队列和优先队列 44<br/>20.10.1 Queue接口 44<br/>20.10.2 双端队列Deque和链表LinkedList 45<br/>20.11 示例学习:表达式求值 47<br/>关键术语 51<br/>本章小结 51<br/>测试题 52<br/>编程练习题 52<br/>第21章 规则集和映射 57<br/>21.1 引言 57<br/>21.2 规则集 57<br/>21.2.1 HashSet 58<br/>21.2.2 LinkedHashSet 61<br/>21.2.3 TreeSet 62<br/>21.3 比较规则集和线性表的性能 65<br/>21.4 示例学习:关键字计数 67<br/>21.5 映射 69<br/>21.6 示例学习:单词的出现次数 73<br/>21.7 单例与不可变的集合和映射 75<br/>关键术语 76<br/>本章小结 76<br/>测试题 77<br/>编程练习题 77<br/>第22章 开发高效算法 79<br/>22.1 引言 79<br/>22.2 使用大O表示法来衡量算法效率 79<br/>22.3 示例:确定大O 81<br/>22.4 分析算法的时间复杂度 85<br/>22.4.1 分析二分查找算法 85<br/>22.4.2 分析选择排序算法 85<br/>22.4.3 分析汉诺塔问题 85<br/>22.4.4 常用的递推关系 86<br/>22.4.5 比较常用的增长函数 86<br/>22.5 使用动态编程求斐波那契数 87<br/>22.6 使用欧几里得算法求最大公约数 89<br/>22.7 求素数的高效算法 93<br/>22.8 使用分治法寻找最近点对 98<br/>22.9 使用回溯法解决八皇后问题 101<br/>22.10 计算几何:寻找凸包 103<br/>22.10.1 卷包裹算法 104<br/>22.10.2 格雷厄姆算法 105<br/>22.11 字符串匹配 106<br/>22.11.1 暴力算法 106<br/>22.11.2 Boyer-Moore算法 107<br/>22.11.3 Knuth-Morris-Pratt算法 109<br/>关键术语 112<br/>本章小结 112<br/>测试题 113<br/>编程练习题 113<br/>第23章 排序 120<br/>23.1 引言 120<br/>23.2 插入排序 121<br/>23.3 冒泡排序 123<br/>23.4 归并排序 125<br/>23.5 快速排序 128<br/>23.6 堆排序 132<br/>23.6.1 堆的存储 133<br/>23.6.2 添加一个新结点 133<br/>23.6.3 删除根结点 134<br/>23.6.4 Heap类 135<br/>23.6.5 使用Heap类进行排序 137<br/>23.6.6 堆排序的时间复杂度 138<br/>23.7 桶排序和基数排序 139<br/>23.8 外部排序 141<br/>23.8.1 实现阶段Ⅰ 143<br/>23.8.2 实现阶段Ⅱ 143<br/>23.8.3 结合两个阶段 145<br/>23.8.4 外部排序复杂度 148<br/>关键术语 148<br/>本章小结 148<br/>测试题 149<br/>编程练习题 149<br/>第24章 实现线性表、栈、队列和优先队列 153<br/>24.1 引言 153<br/>24.2 线性表的通用操作 153<br/>24.3 数组线性表 156<br/>24.4 链表 163<br/>24.4.1 结点 163<br/>24.4.2 MyLinkedList类 165<br/>24.4.3 实现MyLinkedList 166<br/>24.4.4 MyArrayList和MyLinkedList 174<br/>24.4.5 链表的变体 174<br/>24.5 栈和队列 176<br/>24.6 优先队列 179<br/>本章小结 180<br/>测试题 181<br/>编程练习题 181<br/>第25章 二叉搜索树 183<br/>25.1 引言 183<br/>25.2 二叉搜索树基础 183<br/>25.3 表示二叉搜索树 184<br/>25.4 查找一个元素 185<br/>25.5 在BST中插入一个元素 185<br/>25.6 树的遍历 187<br/>25.7 BST类 188<br/>25.8 删除BST中的一个元素 197<br/>25.9 树的可视化和MVC 202<br/>25.10 迭代器 205<br/>25.11 示例学习:数据压缩 207<br/>关键术语 211<br/>本章小结 211<br/>测试题 212<br/>编程练习题 212<br/>第26章 AVL树 216<br/>26.1 引言 216<br/>26.2 重新平衡树 217<br/>26.3 为AVL树设计类 219<br/>26.4 重写insert方法 220<br/>26.5 实现旋转 221<br/>26.6 实现delete方法 221<br/>26.7 AVLTree类 222<br/>26.8 测试 AVLTree类 227<br/>26.9 AVL树的时间复杂度分析 230<br/>关键术语 231<br/>本章小结 231<br/>测试题 231<br/>编程练习题 231<br/>第27章 散列 233<br/>27.1 引言 233<br/>27.2 什么是散列 233<br/>27.3 散列函数和散列码 234<br/>27.3.1 基本数据类型的散列码 234<br/>27.3.2 字符串的散列码 235<br/>27.3.3 压缩散列码 235<br/>27.4 使用开放地址法处理冲突 236<br/>27.4.1 线性探测法 236<br/>27.4.2 二次探测法 237<br/>27.4.3 双重散列法 238<br/>27.5 使用分离链接法处理冲突 240<br/>27.6 装填因子和再散列 241<br/>27.7 使用散列实现映射 242<br/>27.8 使用散列实现规则集 250<br/>关键术语 256<br/>本章小结 257<br/>测试题 257<br/>编程练习题 257<br/>第28章 图及其应用 259<br/>28.1 引言 259<br/>28.2 基本的图术语 260<br/>28.3 表示图 262<br/>28.3.1 表示顶点 262<br/>28.3.2 表示边:边数组 263<br/>28.3.3 表示边:Edge对象 264<br/>28.3.4 表示边:邻接矩阵 264<br/>28.3.5 表示边:邻接线性表 265<br/>28.4 图的建模 267<br/>28.5 图的可视化 276<br/>28.6 图的遍历 279<br/>28.7 深度优先搜索 280<br/>28.7.1 DFS算法 280<br/>28.7.2 DFS的实现 281<br/>28.7.3 DFS的应用 283<br/>28.8 示例学习:连通圆问题 283<br/>28.9 广度优先搜索 285<br/>28.9.1 BFS算法 286<br/>28.9.2 BFS的实现 286<br/>28.9.3 BFS的应用 288<br/>28.10 示例学习:9枚硬币反面问题 288<br/>关键术语 294<br/>本章小结 294<br/>测试题 294<br/>编程练习题 294<br/>第29章 加权图及其应用 299<br/>29.1 引言 299<br/>29.2 加权图的表示 300<br/>29.2.1 加权边的表示:边数组 300<br/>29.2.2 加权邻接矩阵 301<br/>29.2.3 邻接线性表 301<br/>29.3 WeightedGraph类 302<br/>29.4 最小生成树 309<br/>29.4.1 最小生成树算法 310<br/>29.4.2 完善Prim的MST算法 311<br/>29.4.3 MST算法的实现 312<br/>29.5 寻找最短路径 315<br/>29.6 示例学习:加权的9枚硬币反面问题 323<br/>关键术语 326<br/>本章小结 326<br/>测试题 326<br/>编程练习题 327<br/>第30章 集合流的聚合操作 333<br/>30.1 引言 333<br/>30.2 流管道 334<br/>30.2.1 Stream.of、limit和forEach方法 336<br/>30.2.2 sorted方法 336<br/>30.2.3 filter方法 337<br/>30.2.4 max和min方法 337<br/>30.2.5 anyMatch、allMatch和noneMatch方法 337<br/>30.2.6 map、distinct和count方法 337<br/>30.2.7 findFirst、findAny和toArray方法 338<br/>30.3 IntStream、LongStream和DoubleStream 339<br/>30.4 并行流 341<br/>30.5 使用reduce方法进行流的归约 344<br/>30.6 使用collect方法进行流的归约 346<br/>30.7 使用groupingBy收集器进行元素分组 349<br/>30.8 示例学习 352<br/>30.8.1 示例学习:数字分析 352<br/>30.8.2 示例学习:计算字母的出现次数 352<br/>30.8.3 示例学习:计算字符串中每个字母的出现次数 353<br/>30.8.4 示例学习:处理二维数组中的所有元素 354<br/>30.8.5 示例学习:得到目录大小 355<br/>30.8.6 示例学习:关键字计数 356<br/>30.8.7 示例学习:单词出现次数 357<br/>本章小结 358<br/>测试题 359<br/>编程练习题 359<br/>附录A Java关键字和保留字 360<br/>附录B ASCII字符集 361<br/>附录C 操作符优先级表 362<br/>附录D Java修饰符 363<br/>附录E 特殊浮点值 364<br/>附录F 数系 365<br/>附录G 位操作符 369<br/>附录H 正则表达式 370<br/>附录I 枚举类型 376<br/>附录J 大O、大Ω和大Θ表示法 380

作者简介

【有更新】
作者简介
梁勇(Y. Daniel Liang) 现为阿姆斯特朗亚特兰大州立大学计算机科学系教授。之前曾是普渡大学计算机科学系副教授,并两次获得普渡大学杰出研究奖。他所编写的Java教程在美国大学Java课程中采用率极高,同时他还兼任Prentice Hall Java系列丛书的编辑。他是“Java Champion”荣誉得主,并在世界各地为在校学生和程序员做Java程序设计方法及技术方面的讲座。

【有更新】
译者简介
戴开宇 复旦大学软件学院教师,工程硕士导师,中国计算机学会会员。博士毕业于上海交通大学计算机应用专业,2011~2012年在美国佛罗里达大学作访问学者。承担多门本科专业课程、通识教育课程以及工程硕士课程,这些课程被评为校精品课程、上海市重点建设课程、IBM-教育部精品课程等。

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个