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。希望本文的内容对大家的学习或者工作能带来一定的帮助。

时间: 2016-11-14

Java中Map的遍历方法及性能测试

1. 阐述 对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多.理由是:entrySet方法一次拿到所有key和value的集合:而keySet拿到的只是key的集合,针对每个key,都要去Map中额外查找一次value,从而降低了总体效率.那么实际情况如何呢? 为了解遍历性能的真实差距,包括在遍历key+value.遍历key.遍历value等不同场景下的差异,我试着进行了一些对比测试. 2. 对比测试 一开始只进行了简单的测试,但结果却表明k

Java中List与Map初始化的一些写法分享

Java的在还没有发现新写法之前时,我一直是这么初始化List跟Map: 复制代码 代码如下: //初始化List    List<string> list = new ArrayList</string><string>();    list.add("www.jb51.net");    list.add("string2");    //some other list.add() code......    list.add

java如何对map进行排序详解(map集合的使用)

今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序. 一.简单介绍Map 在讲解Map排序之前,我们先来稍微了解下map.map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等.其中这四者的区别如下(简单介绍): HashMap:我们最常用的Map,它根据key的HashCode 值来存储数据,根据key可以直接

Java用for循环Map详细解析

据JDK5的新特性,用For循环Map,例如循环Map的Key 复制代码 代码如下: for(String dataKey : paraMap.keySet())   {        System.out.println(dataKey );               } 注意的是,paraMap 是怎么样定义的,如果是简单的Map paraMap = new HashMap ();那前面的String就只能换成Object了. 循环整个map的key和value 复制代码 代码如下: Ma

Java Map的几种循环方式总结

根据JDK的新特性,用For循环Map,例如循环Map的Key Java代码 复制代码 代码如下: for(String dataKey : paraMap.keySet())    {        System.out.println(dataKey );               } 这里要注意的是,paraMap是怎么样定义的,如果是简单的Map paraMap = new HashMap();那前面的String就只能换成Object了. 对整Map的key和value都进行循环,如

Java实现Map集合二级联动示例

Map集合可以保存键值映射关系,这非常适合本实例所需要的数据结构,所有省份信息可以保存为Map集合的键,而每个键可以保存对应的城市信息,本实例就是利用Map集合实现了省市级联选择框,当选择省份信息时,将改变城市下拉选择框对应的内容. 思路分析: 1. 创建全国(省,直辖市,自治区)映射集合,即LinkedHashMap对象,使用Map接口的put()方法向集合中添加指定的省与城市的映射关系,其中值为String型一维数组. 代码如下: CityMap.java 复制代码 代码如下: import

Java集合Set、List、Map的遍历方法

本文实例讲述了Java集合Set.List.Map的遍历方法,分享给大家供大家参考. 具体方法如下: package com.shellway.javase; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.uti

java中关于Map的三种遍历方法详解

map的三种遍历方法!集合的一个很重要的操作---遍历,学习了三种遍历方法,三种方法各有优缺点~~ 复制代码 代码如下: /* * To change this template, choose Tools | Templates * and open the template in the editor. */package cn.tsp2c.liubao;import java.util.Collection;import java.util.HashMap;import java.util

java集合map取key使用示例 java遍历map

复制代码 代码如下: for (Iterator i = keys.iterator(); i.hasNext()        {           String key = (String) i.next();           String value = (String) map.get(key);           text+=key + " = " + value;       } 复制代码 代码如下: <span style="border-coll

JAVA遍历map的几种实现方法代码

复制代码 代码如下: public static void main(String args[]) { Map<String, Object> map = new HashMap<String, Object>(); map.put("a", "A"); map.put("b", "B"); map.put("c", "C"); // keySet遍历 Itera

java遍历Map的几种方法分析

本文实例分析了java遍历Map的几种方法.分享给大家供大家参考,具体如下: Java代码: Map<String,String> map=new HashMap<String,String>(); map.put("username", "qq"); map.put("passWord", "123"); map.put("userID", "1"); map.

java 遍历Map的几种方法总结

一.迭代key&value 第一种方式:迭代entrySet 1.方法一 /**  * entrySet集合for-each循环(推荐使用)  * 这种方式必须声明泛型类型:  * a.bizData使用Map接收必须得声明泛型:b.for-each()里的Entry的泛型控制可有可无  * Map的泛型控制通常使用<String,Object>  */ Map<String, Object> bizData = dataBus.getBizData(); for (Ent

java 遍历MAP的几种方法示例代码

java中遍历MAP的几种方法 Map<String,String> map=new HashMap<String,String>(); map.put("username", "qq"); map.put("passWord", "123"); map.put("userID", "1"); map.put("email", "qq

Java生成随机数的2种示例方法代码

我们现在做个例子,比如生成20个0到10之间的随机数. 1.使用Random类的nextInt(n)方法,n代表0到n之间,包括0,不包括n 复制代码 代码如下: Random random = new Random();for(int i=0;i<20;i++){ System.out.println(random.nextInt(10));} 2.使用Math类中的random方法,它生成的随机数是0.0到1.0之间的double.要生成int就需要类型转换 复制代码 代码如下: for(i

Java遍历Map键、值和获取Map大小的方法示例

Map读取键值对,Java遍历Map的两种实现方法 第一种方法是根据map的keyset()方法来获取key的set集合,然后遍历map取得value的值 import java.util.HashMap; import java.util.Iterator; import java.util.Set; public class HashMapTest2 { public static void main(String[] args) { HashMap map = new HashMap();

java 遍历Map及Map转化为二维数组的实例

java 遍历Map及Map转化为二维数组的实例 实例代码: import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class Test { public static void main(String[] args) { int a = 0, b = 0, c = 0; // 第一种:通过Map.keySet()遍历Map及将Map转化为二维数组 Map<String, String>

Java线程池的几种实现方法和区别介绍实例详解

下面通过实例代码为大家介绍Java线程池的几种实现方法和区别: import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Random; import java.util.concurrent.Callable; import java.util.

Java线程池的几种实现方法及常见问题解答

工作中,经常会涉及到线程.比如有些任务,经常会交与线程去异步执行.抑或服务端程序为每个请求单独建立一个线程处理任务.线程之外的,比如我们用的数据库连接.这些创建销毁或者打开关闭的操作,非常影响系统性能.所以,"池"的用处就凸显出来了. 1. 为什么要使用线程池 在3.6.1节介绍的实现方式中,对每个客户都分配一个新的工作线程.当工作线程与客户通信结束,这个线程就被销毁.这种实现方式有以下不足之处: •服务器创建和销毁工作的开销( 包括所花费的时间和系统资源 )很大.这一项不用解释,可以