前言 1
第1章 接口 7
为什么有两种列表? 8
List接口 9
练习1 11
第2章 算法分析 14
选择排序算法 15
大O表示法 17
练习2 18
第3章 Array List类 22
对MyArrayList类中方法的分类 22
对add方法分类 24
问题规模 26
链接数据结构 27
练习3 29
关于垃圾回收的注记 32
第4章 LinkedList类 33
MyLinkedList方法的分类 33
比较MyArrayList和MyLinkedList 36
性能分析 36
结果的解释 39
练习4 41
第5章 双向链表 43
结果的性能分析 43
分析LinkedList方法的性能 45
在LinkedList末尾添加 47
双向链表 48
选择一个结构 49
第6章 树的遍历 51
搜索引擎 51
解析HTML 52
使用JSOUP 54
遍历DOM树 56
深度优先搜索 57
Java栈 58
迭代DFS 59
第7章 到达哲学 61
准备开始 61
Iterable接口和Iterator类 62
WikiFetcher 64
练习5 65
第8章 索引器 68
选择数据结构 68
TermCounter 70
练习6 72
第9章 Map接口 77
实现MyLinearMap 77
练习7 78
分析MyLinearMap 79
第10章 哈希方法 82
哈希方法 82
哈希方法是如何工作的? 84
哈希方法和变体 86
练习8 87
第11章 HashMap 89
练习9 89
分析MyHashMap 90
权衡考虑 92
对MyHashMap的性能分析 93
修改MyHashMap 94
UML类图 96
第12章 TreeMap 98
哈希方法有什么问题? 98
二叉搜索树 99
练习10 101
实现TreeMap 102
第13章 二叉搜索树 106
一个简单的MyTreeMap 106
搜索值 107
实现put 108
中序遍历算法 110
对数方法 111
自平衡树 114
另一个练习 114
第14章 持久性 115
Redis 116
Redis客户端和服务器 117
构建一个Redis支持的索引 118
Redis数据类型 120
练习11 122
更多建议 123
一些设计提示 125
第15章 爬行维基百科 126
Redis支持的索引器 126
查找的分析 129
索引分析 129
图的遍历 130
练习12 131
第16章 布尔搜索 135
爬虫解决方案 135
信息检索 137
布尔搜索 138
练习13 139
Comparable和Comparator接口 141
扩展部分 143
第17章 排序 145
插入排序 146
练习14 148
合并排序的分析 149
基数排序 151
堆排序 153
有界堆 155
空间复杂性 156