Java读取Map的两种方法与对比
作者:bladestone 发布时间:2021-08-08 20:56:55
标签:java,map
前言
在java中遍历Map有不少的方法。这篇文章我们就来看一下Java读取Map的两种方法以及这两种方法的对比。
一、 遍历Map方法A
Map map = new HashMap();
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
}
二、遍历Map方法B
Map map = new HashMap();
Iterator iter = map.keySet().iterator();
while (iter.hasNext()) {
Object key = iter.next();
Object val = map.get(key);
}
三、分析遍历方法
方法A: 在遍历中一次读取Map.Entry
,然后直接获取的值。
方法B: 基于keySet则是,先遍历,然后再从Map中读取信息。
四、性能测试
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
public class MapLoopA {
private static Map<Integer, String> infos = new HashMap<Integer, String>();
@BeforeClass
public static void setUp() {
for (int i=0; i<1000000; i++) {
infos.put(i, "test information" + i);
}
System.out.println("setUp is done.");
}
@Test
public void testMapLoopA() {
Iterator<Map.Entry<Integer, String>> iterator = infos.entrySet().iterator();
long startTime = System.currentTimeMillis();
while (iterator.hasNext()) {
Map.Entry<Integer, String> entry = iterator.next();
int key = entry.getKey();
String val = entry.getValue();
}
System.out.println("A solution takes in looping Map with 1000000 entries:"
+ (System.currentTimeMillis()-startTime) + " milli seconds");
}
@Test
public void testMapLoopB() {
Iterator<Integer> iterator = infos.keySet().iterator();
long startTime = System.currentTimeMillis();
while (iterator.hasNext()) {
int key = iterator.next();
String val = infos.get(key);
}
System.out.println("B solution takes in looping Map with 1000000 entries:" +
(System.currentTimeMillis()-startTime) + " milli seconds");
}
}
测试结果:
由此可见,在Map中存放1000000个数据,并在此数据集合中,进行遍历。效率上差异将近1倍的性能差异。
五、总结
好了,以上就是这篇文章的全部内容了,可以看车方法A的效率总体要高一些。一般推荐大家使用方法A。希望本文的内容对大家的学习或者工作能带来一定的帮助。
来源:http://blog.csdn.net/blueheart20/article/details/45173621


猜你喜欢
- 我相信现在绝大部分App几乎避免不了消息推送,其实原理还是使用了长连接,通过服务端将消息推给客户端。市面上也有不少三方库,例如极光、友盟、个
- 引言java 7提供了另外一个很有用的线程池框架,Fork/Join框架理论Fork/Join框架主要有以下两个类组成. * ForkJoi
- 本文实例为大家分享了java实现图片反色处理的具体代码,供大家参考,具体内容如下效果对比原图反色处理原图反色处理核心代码实现import j
- 在C#中 “\”是特殊字符,要表示它的话需要使用“\\”。由于这种写法不方便,C#语言提供了@对其简化。只要在字符串前加上@即可直接使用“\
- 最近,由于公司项目中需要将系统内用户操作的所有日志进行转存备份,考虑到以后可能还需要还原,所以最后决定将日志数据备份到Excel中。 下面是
- Unity中的PostProcessScene:深入解析与实用案例在Unity游戏开发中,我们经常需要对场景进行后处理,以实现更丰富的视觉效
- 在早期开发的时候,我们完成的都是静态页面也就是html页面,随着时间轴的发展,慢慢的引入了jsp页面,当在后端服务查询到数据之后可以转发到j
- 通俗的来说,Jackson是一个 Java 用来处理 JSON 格式数据的类库,其性能非常好。本文就来针对Jackson的用法做一个较为详细
- 目录一 前言二 压缩文件2.1 压缩多个文件2.2 压缩文件或文件树2.3 借助文件访问器压缩三 解压文件四 总结一 前言项目开发中,总会遇
- 使用Post添加数据到数据库出现方块乱码解决方法,在web.xml里最前面添加过滤器,代码如下,放在最前面,因为有优先级,要首先拦截<
- 前言看 WMS 代码的时候看到了 Handler.runWithScissors 方法,所以来恶补一下public static Windo
- RequestHeaders添加自定义参数在开发过程中有的时候,参数需要绑定到requestHeaders中,而并不是在body中进行传输。
- 本文实例为大家分享了java数独游戏的具体代码,供大家参考,具体内容如下自己写的数独游戏,共9关,代码如下:1、DoShudu类用于产生数独
- 本文实例介绍了sdcard存储图片下载简单操作,分享给大家供大家参考,具体内容如下步骤 -- 在配置清单添加完联网权限后1、res/layo
- //1.创建数据库public class DBService extends SQLiteOpenHelper {private fina
- 欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demo
- 1. 引入静态资源:th:href或th:scr+@{/从static目录开始}<html lang="en" x
- 反射和配置文件学习 Spring 的时候,虽然可以知道是通过反射和配置文件的方式来获取 JavaBean 对象,但是一直没有机会自己尝试一次
- 一 概述GC(Garbage Collection),在程序运行过程中内存空间是有限的,为了更好的的使用有限的内存空间,GC会将不再使用的对
- 新版本的xlsx是使用新的存储格式,貌似是处理过的XML。对于OpenXML我网上搜了一下,很多人没有介绍。所以我就这里推荐下,相信会成为信