目录前言1第 1 章 接口7为什么有两种列表?8List 接口9练习 111第 2 章 算法分析14选择排序算法15大 O 表示法17练习 218第 3 章 ArrayList 类22对 MyArrayList 类中方法的分类22对 add 方法分类24问题规模26链接数据结构27练习 329关于垃圾回收的注记32第 4 章 LinkedList 类33MyLinkedList 方法的分类33比较 MyArrayList 和 MyLinkedList36性能分析36结果的解释39练习 441第 5 章 双向链表43结果的性能分析43分析 LinkedList 方法的性能45在 LinkedList 末尾添加47双向链表48选择一个结构49第 6 章 树的遍历51搜索引擎51解析 HTML52使用 JSOUP54遍历 DOM 树56深度优先搜索57Java 栈58迭代 DFS59第 7 章 到达哲学61准备开始61Iterable 接口和 Iterator 类62WikiFetcher64练习 565第 8 章 索引器68选择数据结构68TermCounter70练习 672第 9 章 Map 接口77实现 MyLinearMap77练习 778分析 MyLinearMap79第 10 章 哈希方法82哈希方法82哈希方法是如何工作的?84哈希方法和变体86练习 887第 11 章 HashMap89练习 989分析 MyHashMap90权衡考虑92对 MyHashMap 的性能分析93修改 MyHashMap94UML 类图96第 12 章 TreeMap98哈希方法有什么问题?98二叉搜索树99练习 10101实现 TreeMap102第 13 章 二叉搜索树106一个简单的 MyTreeMap106搜索值107实现 put108中序遍历算法110对数方法111自平衡树114另一个练习114第 14 章 持久性115Redis116Redis 客户端和服务器117构建一个 Redis 支持的索引118Redis 数据类型120练习 11122更多建议123一些设计提示125第 15 章 爬行维基百科126Redis 支持的索引器126查找的分析129索引分析129图的遍历130练习 12131第 16 章 布尔搜索135爬虫解决方案135信息检索137布尔搜索138练习 13139Comparable 和 Comparator 接口141扩展部分143第 17 章 排序145插入排序146练习 14148合并排序的分析149基数排序151堆排序153有界堆155空间复杂性156
Allen B. Downey是奥林工程学院计算机科学领域的教授,曾经在韦尔斯利学院、科尔比学院和伯克利大学执教。他拥有伯克利大学计算机科学博士学位及麻省理工学院硕士和学士学位。他编写的其他书籍有:《Think Java》、《Think Python》、《Think Stats》和《Think Bayes》。
本书作者强调实践知识和技能胜过理论,在书中为你展示了怎样使用数据结构实现有效的算法,并分析和测试了算法的性能。在本书中你将探索Java集合框架(JCF)中重要的类,它们是如何实现的,以及如何执行。书中的每一章都提供了动手练习及其在线测试代码。本书主要内容有:学习使用列表和映射等数据结构并理解它们是如何工作的。构建一个应用程序,用于读取维基百科页、解析页面内容并导航结果树。通过分析代码预测其运行时间和所需的内存空间。分别使用哈希表和二叉搜索树编写实现Map接口的类。创建一个简单的Web搜索引擎,包括一个网络爬虫、一个存储Web页面内容的索引器和一个返回用户查询结果的检索器。