首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Java 容器源码分析之 Map(2)

Java 容器源码分析之 Map(2)

访问元素
表 4 中列出了 Map 访问方法。Map 通常适合按键(而非按值)进行访问。Map 定义中没有规定这肯定是真的,但通常您可以期望这是真的。例如,您可以期望 containsKey() 方法与 get() 方法一样快。另一方面,containsValue() 方法很可能需要扫描 Map 中的值,因此它的速度可能比较慢。
表 4:Map 访问和测试方法: 这些方法检索有关 Map 内容的信息但不更改 Map 内容。
get(Object key)返回与指定键关联的值
containsKey(Object key)如果 Map 包含指定键的映射,则返回 true
containsValue(Object value)如果此 Map 将一个或多个键映射到指定值,则返回 true
isEmpty()如果 Map 不包含键-值映射,则返回 true
size()返回 Map 中的键-值映射的数目

对使用 containsKey() 和 containsValue() 遍历 HashMap 中所有元素所需时间的测试表明,containsValue() 所需的时间要长很多。实际上要长几个数量级!(参见 和 ,以及随附文件中的 。因此,如果 containsValue() 是应用程序中的性能问题,它将很快显现出来,并可以通过监测您的应用程序轻松地将其识别。这种情况下,我相信您能够想出一个有效的替换方法来实现 containsValue() 提供的等效功能。但如果想不出办法,则一个可行的解决方案是再创建一个 Map,并将第一个 Map 的所有值作为键。这样,第一个 Map 上的 containsValue() 将成为第二个 Map 上更有效的 containsKey()。

图 1: 使用 JDeveloper 创建并运行 Map 测试类


图 2: 在 JDeveloper 中使用执行监测器进行的性能监测查出应用程序中的瓶颈
返回列表