Java中读取Map的两种方法对比

引言: 在Java中Map的使用非常频繁,我们经常会需要对Map进行遍历和读取,下面将展示两种遍历的方法以及简要分析。

1.  遍历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();
  }

2. 遍历Map方法B

    Map map = new HashMap();
  Iterator iter = map.keySet().iterator();
  while (iter.hasNext()) {
     Object key = iter.next();
     Object val = map.get(key);
  }

3. 分析遍历方法

方法A:  在遍历中一次读取Map.Entry,然后直接获取的值。

方法B:   基于keySet则是,先遍历,然后再从Map中读取信息。

4. 性能测试

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倍的性能差异。

5. 总结

方法A的效率总体要高一些。一般推荐大家使用方法A。

时间: 2024-12-27 09:41:37

Java中读取Map的两种方法对比的相关文章

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.put("em

java 中遍历Map的几种方法

转自: http://blog.csdn.net/wzb56/article/details/7864911 方法分为两类: 一类是基于map的Entry:map.entrySet(); 一类是基于map的key:map.keySet() 而每一类都有两种遍历方式: a.利用迭代器 iterator: b.利用for-each循环: 代码举例如下 package cn.wzb; import java.util.ArrayList; import java.util.HashMap; impor

Java中集合排序的两种方法

import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * * <p> * ClassName CollectionsSort * </p> * <p> * Description 主要介绍两种集合的排序算法<br/> * 第一:java.util.Collections.sort(jav

Android之Handler在新线程中读取网络的两种方法

方法一: 创建一个Thread,然后调用start方法. 实例: package com.example.android_handle; import java.io.BufferedInputStream; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import org.apache.http.util.ByteArrayBuffer; import android.app.A

java中实现多线程的两种基本方法

java中实现多线程有两种基本方法,一种是继承Thread, 另一种是实现Runnable接口. 但是因为java中子类只能继承一个父类,如果采用继承Thread类,就不能继承其他类,很受限制. 以下是采用继承Thread类的例子: public class MyThreadTest{ public static void main(String[] args){ MyThread amythread1=new MyThread("my thread 1"); MyThread amy

java连接sql server2008的两种方法

最近学到java连接数据库(sql server),发现常用的我们有两种方法,那么这里我总结一下这两种方法怎么使用,还有它们的区别,还有我们一般要使用哪一种方法. 方法一:使用jdbc-odbc桥连接sql server,作为中间媒介连接数据库; 注意我们每次在连接数据库前都必须要引入sql包:import java.sql.*;接下来的步骤都是习惯性步骤,我这里就按照每一步的使用进行列举: 1.配置数据源:打开控制面版->管理工具->数据源(ODBC)->(一般而言我们使用用户DSN)

python中执行shell的两种方法总结

这篇文章主要介绍了python中执行shell的两种方法,有两种方法可以在Python中执行SHELL程序,方法一是使用Python的commands包,方法二则是使用subprocess包,这两个包均是Python现有的内置模块.需要的朋友可以参考借鉴,下面来一起看看吧. 一.使用python内置commands模块执行shell commands对Python的os.popen()进行了封装,使用SHELL命令字符串作为其参数,返回命令的结果数据以及命令执行的状态: 该命令目前已经废弃,被s

Java中Compareable和Comparator两种比较器的区别

Java中Compareable和Comparator两种比较器的区别 1.引言 在java这个处处是对象的世界里,对两个对象进行按某一属性进行比较是特别常见的需求.比如书店中的书按照价格比较,亦或者是学生按照成绩进行排名等等. 对于JDK8而言,有三种实现对象比较的方法: 1.在需要比较的对象类中覆写Object类的equals()方法: 2.需要比较的类继承Comparable接口,然后在其类内部实现compareTo()方法: 3.抛去需要被比较的类,在其外部自定义一个单独的对象比较器,继

Linux中生成密钥的两种方法

Linux中生成密钥的两种方法 SSH服务支持一种安全认证机制,即密钥认证.所谓的密钥认证,实际上是使用一对加密字符串,一个称为公钥(publickey), 任何人都可以看到其内容,用于加密:另一个称为密钥(privatekey),只有拥有者才能看到,用于解密.通过公钥加密过的密文使用密钥可以轻松解密,但根据公钥来猜测密钥却十分困难. ssh的密钥认证就是使用了这一特性.服务器和客户端都各自拥有自己的公钥和密钥.如何使用密钥认证登录linux服务器呢? 在使用密钥认证远程登入linux之前,我们