《Java程序设计 基础、编程抽象与算法策略》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:(美)埃里克S.罗伯茨著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2017
  • ISBN:9787111578274
  • 页数:545 页
图书介绍:

第1章 Java概览 1

1.1 你的第一个Java程序 1

1.2 Java的历史 2

1.2.1 编程语言 2

1.2.2 面向对象范型 3

1.2.3 Java编程语言 4

1.2.4 Java的演化 4

1.3 Java程序的结构 5

1.3.1 注释 6

1.3.2 包声明 6

1.3.3 导入语句 7

1.3.4 类定义 7

1.3.5 run方法 8

1.4 变量 11

1.4.1 变量声明 11

1.4.2 命名惯例 11

1.5 常量 12

1.6 数据类型 13

1.6.1 数据类型的概念 13

1.6.2 整数类型 14

1.6.3 浮点类型 14

1.6.4 布尔类型 15

1.6.5 字符 15

1.6.6 字符串 16

1.6.7 复合类型 16

1.7 表达式 16

1.7.1 优先级与结合性 17

1.7.2 表达式中的混用类型 18

1.7.3 整数除法和取余操作符 18

1.7.4 类型强制转换 19

1.7.5 赋值操作符 20

1.7.6 递增和递减操作符 21

1.7.7 布尔操作符 22

1.8 语句 24

1.8.1 简单语句 24

1.8.2 块 24

1.8.3 if语句 24

1.8.4 switch语句 25

1.8.5 while语句 26

1.8.6 for语句 29

1.9 类、对象和方法 31

1.10 总结 33

1.11 复习题 34

1.12 习题 35

第2章 方法 39

2.1 Java中的方法 39

2.1.1 Java方法的语法结构 40

2.1.2 静态方法 41

2.1.3 重载 42

2.2 方法和程序结构 43

2.3 方法调用的机制 44

2.3.1 调用方法的步骤 44

2.3.2 组合函数 45

2.3.3 跟踪组合函数 47

2.4 简单的递归函数 50

2.4.1 fact的递归方案 51

2.4.2 追踪递归过程 51

2.4.3 递归的信任飞跃 54

2.5 斐波那契函数 55

2.5.1 计算斐波那契数列中的项 55

2.5.2 在递归实现中收获自信 57

2.5.3 递归实现的效率 57

2.5.4 递归不应被指责 58

2.6 总结 60

2.7 复习题 60

2.8 习题 61

第3章 字符串 67

3.1 将字符串用作抽象值 67

3.2 字符串操作 68

3.2.1 在字符串中选择字符 70

3.2.2 抽取字符串的各个部分 70

3.2.3 字符串比较 71

3.2.4 在字符串内搜索 72

3.2.5 遍历字符串中的字符 72

3.2.6 通过连接来扩展字符串 73

3.2.7 使用递归操作字符串 74

3.2.8 对字符分类 74

3.3 编写字符串应用程序 75

3.3.1 识别回文 76

3.3.2 将英文翻译为隐语 77

3.4 总结 79

3.5 复习题 80

3.6 习题 81

第4章 文件 86

4.1 文本文件 86

4.2 读取文本文件 87

4.2.1 创建文件读取器 87

4.2.2 异常处理 88

4.2.3 逐个字符地读取文件 90

4.2.4 逐行地读取文件 92

4.3 编写文本文件 93

4.3.1 打开用于输出的文件 93

4.3.2 将输出写入文件中 93

4.4 格式化输出 95

4.5 格式化输入 100

4.6 使用文件对话框 102

4.7 总结 105

4.8 复习题 105

4.9 习题 106

第5章 数组 109

5.1 数组简介 109

5.1.1 数组声明 109

5.1.2 数组选择 110

5.2 数据表示和内存 112

5.2.1 位、字节和字 112

5.2.2 二进制和十六进制表示 113

5.2.3 表示其他数据类型 115

5.2.4 数组的表示 115

5.3 使用数组来制表 117

5.4 数组初始化 118

5.5 多维数组 119

5.6 可变长参数列表 120

5.7 总结 120

5.8 复习题 121

5.9 习题 122

第6章 集合 128

6.1 ArrayList类 128

6.1.1 指定ArrayList的元素类型 129

6.1.2 声明ArrayList对象 129

6.1.3 ArrayList的操作 129

6.1.4 ArrayList类的一个简单应用 130

6.2 包装器类 131

6.2.1 从基本类型创建对象 132

6.2.2 自动装箱 132

6.2.3 包装器类中的静态方法 133

6.3 栈抽象 134

6.3.1 Stack类的结构 135

6.3.2 栈和袖珍计算器 135

6.4 队列抽象 138

6.4.1 队列应用 140

6.4.2 仿真与模型 140

6.4.3 排队模型 140

6.4.4 离散时间 141

6.4.5 仿真时间中的事件 141

6.4.6 实现仿真 142

6.4.7 随机数 144

6.5 映射表抽象 145

6.5.1 Map接口的结构 145

6.5.2 在应用中使用映射表 147

6.6 集抽象 149

6.7 遍历集合 151

6.7.1 使用迭代器 151

6.7.2 迭代顺序 151

6.7.3 计算词频 152

6.8 总结 154

6.9 复习题 155

6.10 习题 156

第7章 类和对象 161

7.1 类和面向对象设计 161

7.2 定义一个简单的Point类 161

7.2.1 将点定义为一种记录类型 162

7.2.2 在Point类中包含方法 163

7.2.3 javadoc注释 165

7.2.4 让实例变量保持私有 166

7.3 有理数 168

7.3.1 定义新类的策略 169

7.3.2 站在客户的视角 169

7.3.3 指定Rational类的私有状态 170

7.3.4 定义Rational类的构造器 170

7.3.5 为Rational类定义方法 171

7.3.6 实现Rational类 172

7.4 设计一个符号扫描器类 175

7.4.1 客户希望从符号扫描器中得到什么 175

7.4.2 TokenScanner类 176

7.5 将对象链接起来 180

7.5.1 刚铎的烽火 180

7.5.2 在链表中迭代 183

7.6 枚举类型 183

7.7 单元测试 185

7.8 总结 189

7.9 复习题 190

7.10 习题 190

第8章 继承 197

8.1 继承的简单示例 197

8.1.1 指定参数化类中的类型 197

8.1.2 调用继承方法的规则 198

8.1.3 调用继承构造器的规则 200

8.1.4 控制对类内容的访问 200

8.1.5 继承之外的选择 201

8.2 定义Employee类 203

8.3 Java图形类概览 206

8.3.1 在屏幕上放置一个窗口 207

8.3.2 向窗口中添加图形 208

8.4 一种图形对象的层次结构 210

8.4.1 创建一个面向对象的图形包 211

8.4.2 实现GWindow和GCanvas类 216

8.4.3 演示GObject类 219

8.4.4 创建简单的动画 220

8.5 定义一个控制台界面 222

8.6 总结 227

8.7 复习题 228

8.8 习题 228

第9章 递归策略 233

9.1 递归地思考 233

9.1.1 一个分而治之算法的简单示例 233

9.1.2 保持大局观 235

9.1.3 避免常见的陷阱 235

9.2 汉诺塔 236

9.2.1 刻画汉诺塔问题 237

9.2.2 找到递归策略 238

9.2.3 验证递归策略 240

9.2.4 编码解决方案 240

9.2.5 跟踪递归过程 241

9.3 子集求和问题 245

9.3.1 探寻递归解决方案 245

9.3.2 包含/排除模式 246

9.4 生成排列 246

9.5 图形递归 249

9.5.1 一个计算机艺术实例 249

9.5.2 分形 252

9.6 总结 256

9.7 复习题 256

9.8 习题 256

第10章 回溯算法 267

10.1 迷宫中的递归回溯 267

10.1.1 右手规则 267

10.1.2 寻找递归方式 268

10.1.3 识别简单情况 269

10.1.4 编码迷宫解决算法 270

10.1.5 说服自己解决方案有效 271

10.2 回溯与游戏 273

10.2.1 Nim游戏 274

10.2.2 对弈游戏的通用程序 277

10.3 最小最大值算法 279

10.3.1 博弈树 279

10.3.2 对位置和奕法做评估 279

10.3.3 限制递归搜索的深度 281

10.3.4 实现最小最大值算法 282

10.4 总结 283

10.5 复习题 284

10.6 习题 285

第11章 算法分析 294

11.1 排序问题 294

11.1.1 选择排序算法 294

11.1.2 性能的经验度量 295

11.1.3 分析选择排序的性能 296

11.2 计算复杂度 297

11.2.1 大O标记法 298

11.2.2 大O的标准简化 298

11.2.3 选择排序的计算复杂度 298

11.2.4 从代码中降低计算复杂度 299

11.2.5 最坏情况复杂度与平均情况复杂度 300

11.2.6 大O的形式化定义 301

11.3 递归的救赎 302

11.3.1 分而治之策略的威力 302

11.3.2 合并两个数组 303

11.3.3 合并排序算法 304

11.3.4 合并排序的计算复杂度 304

11.3.5 比较N2与N log N的性能 306

11.4 标准的复杂度分类 307

11.5 快速排序算法 309

11.5.1 划分数组 310

11.5.2 分析快速排序的性能 311

11.6 数学归纳 313

11.7 总结 315

11.8 复习题 316

11.9 习题 317

第12章 效率与表示方式 323

12.1 用于文本编辑的软件模式 323

12.2 设计一个简单的文本编辑器 324

12.2.1 编辑器命令 324

12.2.2 考虑底层的表示方式 325

12.2.3 对编辑器应用编码 327

12.3 基于数组的实现 328

12.3.1 定义私有数据结构 329

12.3.2 实现缓冲的操作 329

12.3.3 基于数组的编辑器的计算复杂度 332

12.4 基于栈的实现 333

12.4.1 定义私有数据结构 333

12.4.2 实现缓冲的操作 333

12.4.3 比较计算复杂度 335

12.5 基于表的实现 336

12.5.1 链表缓冲中的插入操作 338

12.5.2 链表缓冲中的删除操作 340

12.5.3 链表表示方式中的光标移动 341

12.5.4 完成缓冲的实现 343

12.5.5 链表缓冲区的计算复杂度 345

12.5.6 双向链表 345

12.5.7 时空权衡 346

12.6 总结 346

12.7 复习题 347

12.8 习题 347

第13章 线性结构 351

13.1 泛型 351

13.1.1 Java中泛型的实现 351

13.1.2 泛型的限制 353

13.1.3 GenericArray类 354

13.2 实现栈 355

13.2.1 用数组结构实现栈 355

13.2.2 用链表实现栈 357

13.3 实现队列 361

13.3.1 用数组实现队列 362

13.3.2 用链表实现队列 366

13.4 实现列表 369

13.5 翻倍策略的分析 372

13.6 总结 373

13.7 复习题 374

13.8 习题 374

第14章 映射表 377

14.1 用数组实现映射表 378

14.2 在表中查找 379

14.3 散列 382

14.3.1 设计数据结构 382

14.3.2 理解字符串的散列函数 384

14.3.3 跟踪散列表的实现 385

14.3.4 调整桶元数量 386

14.3.5 实现你自己的散列函数 388

14.4 实现HashMap类 389

14.5 总结 392

14.6 复习题 393

14.7 习题 393

第15章 树 396

15.1 家族树 396

15.1.1 用于描述树的术语 397

15.1.2 树的递归属性 397

15.1.3 用Java表示家族树 397

15.2 二叉搜索树 398

15.2.1 二叉搜索树幕后的动机 399

15.2.2 在二叉搜索树中查找结点 400

15.2.3 在二叉搜索树中插入新结点 401

15.2.4 移除结点 404

15.2.5 树的遍历 405

15.3 平衡树 406

15.3.1 树的平衡策略 408

15.3.2 可视化AVL算法 408

15.3.3 单旋转 410

15.3.4 双旋转 411

15.3.5 实现AVL算法 412

15.4 用二叉搜索树实现映射表 414

15.5 偏序树 417

15.6 总结 419

15.7 复习题 420

15.8 习题 422

第16章 集 428

16.1 作为数学抽象的集 428

16.1.1 隶属关系 428

16.1.2 集的操作 429

16.1.3 集的恒等式 430

16.2 集的实现策略 431

16.3 扩展集的模型 432

16.4 优化由小整数构成的集 435

16.4.1 特征向量 435

16.4.2 由位构成的压缩数组 436

16.4.3 位操作 437

16.4.4 实现特征向量 438

16.4.5 定义CharSet类 439

16.5 总结 443

16.6 复习题 443

16.7 习题 444

第17章 图 447

17.1 图的结构 447

17.1.1 有向图和无向图 448

17.1.2 路径和环 449

17.1.3 连通性 449

17.2 表示策略 450

17.2.1 使用邻接表表示连接 450

17.2.2 使用邻接矩阵表示连接 451

17.2.3 使用弧集表示连接 452

17.3 基于集的图抽象 452

17.4 图的遍历 458

17.4.1 深度优先搜索 458

17.4.2 广度优先搜索 461

17.5 查找最小代价路径 463

17.6 泛化Graph类 467

17.6.1 在图抽象中使用参数化类型 468

17.6.2 添加额外的操作 469

17.7 搜索Web的算法 469

17.7.1 Google的PageRank算法 470

17.7.2 PageRank计算的一个微型实例 470

17.8 总结 472

17.9 复习题 473

17.10 习题 474

第18章 表达式树 481

18.1 解释器概览 481

18.2 表达式的结构 483

18.2.1 表达式的递归定义 483

18.2.2 二义性 484

18.2.3 表达式树 485

18.2.4 实现Expression的子类 488

18.2.5 对表达式绘图 491

18.2.6 跟踪计算过程 492

18.3 解析表达式 495

18.3.1 解析和语法 495

18.3.2 考虑优先级 496

18.3.3 递归下推解析器 496

18.4 总结 501

18.5 复习题 502

18.6 习题 502

第19章 将函数作为数据使用 507

19.1 交互式程序 507

19.1.1 Java事件模型 507

19.1.2 事件驱动的简单应用 508

19.1.3 匿名内部类 511

19.2 命令分派表 512

19.2.1 使用层叠if语句的命令分派 513

19.2.2 使用命令表的命令分派 514

19.2.3 用lambda表达式实现命令分派 516

19.3 lambda表达式 516

19.3.1 Java中lambda表达式的语法 516

19.3.2 函数式接口 517

19.3.3 一个lambda函数的简单应用 518

19.4 绘制函数 519

19.5 映射函数 520

19.6 总结 522

19.7 复习题 523

19.8 习题 523

索引 529