Java Map 集合类简介
日期:2007年11月2日 作者: 查看:[大字体 中字体 小字体]-
我运行了一个小测试(随附文件中的 Test1),该测试使用了 HashMap,并使用以下两种方法对迭代 Map 元素的开销进行了比较:
int mapsize = aMap.size();
Iterator keyValuePairs1 = aMap.entrySet().iterator();
for (int i = 0; i < mapsize; i++)
{
Map.Entry entry = (Map.Entry) keyValuePairs1.next();
Object key = entry.getKey();
Object value = entry.getValue();
...
}
Object[] keyValuePairs2 = aMap.entrySet().toArray();
for (int i = 0; i < rem; i++) {
{
Map.Entry entry = (Map.Entry) keyValuePairs2[i];
Object key = entry.getKey();
Object value = entry.getValue();
...
}
此测试使用了两种测量方法: 一种是测量迭代元素的时间,另一种测量使用 toArray 调用创建数组的其他开销。 第一种方法(忽略创建数组所需的时间)表明,使用已从 toArray 调用中创建的数组迭代元素的速度要比使用 Iterator 的速度大约快 30%-60%。 但如果将使用 toArray 方法创建数组的开销包含在内,则使用 Iterator 实际上要快 10%-20%。 因此,如果由于某种原因要创建一个集合元素的数组而非迭代这些元素,则应使用该数组迭代元素。 但如果您不需要此中间数组,则不要创建它,而是使用 Iterator 迭代元素。
表 3: 返回视图的 Map 方法: 使用这些方法返回的对象,您可以遍历 Map 的元素,还可以删除 Map 中的元素。 entrySet() 返回 Map 中所包含映射的 Set 视图。 Set 中的每个元素都是一个 Map.Entry 对象,可以使用 getKey() 和 getValue() 方法(还有一个 setValue() 方法)访问后者的键元素和值元素
keySet() 返回 Map 中所包含键的 Set 视图。 删除 Set 中的元素还将删除 Map 中相应的映射(键和值)
values() 返回 map 中所包含值的 Collection 视图。 删除 Collection 中的元素还将删除 Map 中相应的映射(键和值)
访问元素
表 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() 所需的时间要长很多。 实际上要长几个数量级! (参见图 1 和图 2,以及随附文件中的 Test2)。 因此,如果 containsValue() 是应用程序中的性能问题,它将很快显现出来,并可以通过监测您的应用程序轻松地将其识别。 这种情况下,我相信您能够想出一个有效的替换方法来实现 containsValue() 提供的等效功能。 但如果想不出办法,则一个可行的解决方案是再创建一个 Map,并将第一个 Map 的所有值作为键。 这样,第一个 Map 上的 containsValue() 将成为第二个 Map 上更有效的 containsKey()。 - 上一页 [1] [2] [3] 下一页
-
- Java Map 集合类简介 相关文章:
- ·Windows Vista系统常用补丁功能介绍
- ·QQ会员成长体系介绍及成长值换算参照表
- ·Windows Vista SP1改进功能完全介绍
- ·BPEL的基本活动介绍
- ·robots.txt和robots Meta标签的介绍
- ·提高做火狐firefox推介效果的技巧代码
- ·Linux下的网络配置常用命令介绍
- ·常用的XHTML标签的使用技巧介绍
- ·Google 禁止使用在线广告宣传Adsense推介
- ·UNIX和Linux系统添加用户的方法介绍
- Java Map 集合类简介 相关软件
- ·《苍天》双手大刀操作方法介绍视频
- ·《苍天》偃月刀操作方法介绍视频
- ·地球帝国3介绍视频
- ·中国8大菜系介绍及其他
- ·好莱坞影星肖像100张(附简介)2-1
- ·李小龙电影简介
- ·jdk工具介绍
- ·C# 程序员介绍(英文版)
- ·法硕复习资料文字部分之备考指南及复习方法介绍
- ·同等学历计算机课件 介绍
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
下一篇:Java Mail API及其应用 —— 一个邮件列表服务器的实现 (四)(转贴)
精品推荐
热点TOP10
- ·JAVA教程 第五讲 AWT图形用户界面设计
- ·SP 短信开发-基础知识篇
- ·使用JAVAMAIL发邮件的一个例子(转)
- ·J2ME蓝牙程序开发实战入门
- ·用Java实现音频播放
- ·使用SimpleDateFormat必须注意的问题
- ·Sun:JavaFX Mobile和JavaFX Script
- ·Java EE6提案的两大主题:拓展性和概要
- ·Java会因为RoR的流行而过时吗?
- ·Java资料:Swing中的事件处理详细资料
- ·Java知识:Web应用下实现定时任务简便方法
- ·技巧:Java中用动态代理类实现记忆功能
- ·新手入门:写Java程序的三十个基本规则
- ·入门:Java初学者入门要注意的基础知识
- ·Java SE 6中XML数字签名标准Java接口
- ·JForum 2.1.7 源程序编译草记
- ·Spring中的Template和Callback模式
- ·从集合类的升级联想到Java适配器模式
- ·I18N-国际化消息和日志
- ·通过JDMK 进行遗留系统管理
特别推荐
- ·Java精华积累:初学者都应该搞懂的问题
- ·Java多媒体框架设计自动播放机实例详解
- ·如何有效防止Java程序源码被人偷窥?
- ·Cell插件在J2EE系统中的应用
- ·初学者想学Hibernate,初级基础教程
- ·Java语言实现支持视频点播的WEB服务器
- ·关于Java编程的中文问题的几条分析原则
- ·确保J2ME无线移动商业应用程序的安全性
- ·Java开源技术:Eclipse的使用技巧详解
- ·新手入门:Java中的修饰词使用方法总结
- ·JAVA开发者应该去的20个英文网站
- ·使用JDBC创建数据库访问程序
- ·JDK的命令详解
- ·Java学习从入门到精通(附FAQ)
- ·Tomcat性能调整
- ·JSF:Java中面向Web开发的生旦净末丑
- ·对Java语言入门初学者的一些建议
- ·Java技术的新方向
- ·Jive源代码研究
- ·谨慎使用Date和Time类
