Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
think-dast-zh
提交
f4db54e6
T
think-dast-zh
项目概览
OpenDocCN
/
think-dast-zh
大约 1 年 前同步成功
通知
0
Star
26
Fork
13
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
think-dast-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f4db54e6
编写于
9月 21, 2017
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ch11
上级
dc492583
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
4 addition
and
4 deletion
+4
-4
11.md
11.md
+4
-4
未找到文件。
11.md
浏览文件 @
f4db54e6
...
...
@@ -17,7 +17,7 @@
如果每个子映射的条目数是不变的,我们可以在常数时间内搜索一个子映射。并且计算散列函数通常是常数时间(它可能取决于键的大小,但不取决于键的数量)。这使得
`Map`
的核心方法,
`put`
和
`get`
时间不变。
在下一个练习中,
您
将看到细节。
在下一个练习中,
你
将看到细节。
## 11.1 练习 9
...
...
@@ -50,7 +50,7 @@ public class MyHashMap<K, V> extends MyBetterMap<K, V> implements Map<K, V> {
运行
`ant build`
来编译源文件。然后运行
`ant MyHashMapTest`
。它应该失败,因为执行
`rehash`
会抛出异常。你的工作是填充它。
填充
`rehash`
的主体,来收集表中的条目,调整表的大小,然后重新放入条目。我提供了两种可能会派上用场的方法:
`MyBetterMap.makeMaps`
和
`MyLinearMap.getEntries`
。每次调用它时,
您
的解决方案应该使映射数量加倍。
填充
`rehash`
的主体,来收集表中的条目,调整表的大小,然后重新放入条目。我提供了两种可能会派上用场的方法:
`MyBetterMap.makeMaps`
和
`MyLinearMap.getEntries`
。每次调用它时,
你
的解决方案应该使映射数量加倍。
## 11.2 分析`MyHashMap`
...
...
@@ -129,12 +129,12 @@ public class MyHashMap<K, V> extends MyBetterMap<K, V> implements Map<K, V> {
运行
`ant build`
来编译源文件。然后运行
`ant ProfileMapPut`
。它使用一系列问题规模,测量
`HashMap.put`
(由 Java 提供)的运行时间,并在重对数比例尺上绘制运行时间与问题规模。如果这个操作是常数时间,
`n`
个操作的总时间应该是线性的,所以结果应该是斜率为
`1`
的直线。当我运行这个代码时,估计的斜率接近
`1`
,这与我们的分析一致。你应该得到类似的东西。
修改
`ProfileMapPut.java`
,来测量
您的
`MyHashMap`
实现,而不是 Java 的
`HashMap`
。再次运行分析器,查看斜率是否接近
`1`
。您
可能需要调整
`startN`
和
`endMillis`
,来找到一系列问题规模,其中运行时间多于几毫秒,但不超过几秒。
修改
`ProfileMapPut.java`
,来测量
你的
`MyHashMap`
实现,而不是 Java 的
`HashMap`
。再次运行分析器,查看斜率是否接近
`1`
。你
可能需要调整
`startN`
和
`endMillis`
,来找到一系列问题规模,其中运行时间多于几毫秒,但不超过几秒。
当我运行这个代码时,我感到惊讶:斜率大约为
`1.7`
,这表明这个实现不是一直都是常数的。它包含一个“性能错误”。
在阅读下一节之前,
您
应该跟踪错误,修复错误,并确认现在
`put`
是常数时间,符合预期。
在阅读下一节之前,
你
应该跟踪错误,修复错误,并确认现在
`put`
是常数时间,符合预期。
## 11.5 修复`MyHashMap`
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录