Java读取Map的两种方法与对比_java

前言

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索java
, 对比
, java读取map
, map对比
两个map
java 读取map、java map对比、java map 读取文件、map和reduce两种操作、map遍历的两种方式,以便于您获取更多的相关知识。

时间: 2024-08-11 10:55:06

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

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

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实现多线程的两种方法实例分享_java

java语言已经内置了多线程支持,所有实现Runnable接口的类都可被启动一个新线程,新线程会执行该实例的run()方法,当run()方法执行完毕后,线程就结束了.一旦一个线程执行完毕,这个实例就不能再重新启动,只能重新生成一个新实例,再启动一个新线程. Thread类是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法: 复制代码 代码如下: Thread t = new Thread(); t.start();

php fseek函数读取大文件两种方法_php实例

php读取大文件,使用fseek函数是最为普遍的方式,它不需要将文件的内容全部读入内存,而是直接通过指针来操作,所以效率是相当高效的.在使用fseek来对文件进行操作时,也有多种不同的方法,效率可能也是略有差别的,下面是常用的两种方法. 方法一: 首先通过fseek找到文件的最后一位EOF,然后找最后一行的起始位置,取这一行的数据,再找次一行的起始位置,再取这一行的位置,依次类推,直到找到了$num行.实现代码如下: 整个代码执行完成耗时 0.0095 (s) function tail($fp

php fseek函数读取大文件两种方法

php读取大文件,使用fseek函数是最为普遍的方式,它不需要将文件的内容全部读入内存,而是直接通过指针来操作,所以效率是相当高效的.在使用fseek来对文件进行操作时,也有多种不同的方法,效率可能也是略有差别的,下面是常用的两种方法. 方法一: 首先通过fseek找到文件的最后一位EOF,然后找最后一行的起始位置,取这一行的数据,再找次一行的起始位置,再取这一行的位置,依次类推,直到找到了$num行.实现代码如下: 整个代码执行完成耗时 0.0095 (s) function tail($fp

可视化Swing中JTable控件绑定SQL数据源的两种方法深入解析_java

在 MyEclipse 的可视化 Swing 中,有 JTable 控件.JTable 用来显示和编辑常规二维单元表.那么,如何将 数据库SQL中的数据绑定至JTable中呢?在这里,提供两种方法.JTable的构造方法通过查阅Java的API,可以可以得到JTable的两个重要的构造方法:JTable(Object[][] rowData, Object[] columnNames)构造一个 JTable 来显示二维数组 rowData 中的值,其列名称为 columnNames.JTable

[Java] 实现多线程的两种方法

版权声明:请尊重个人劳动成果,转载注明出处,谢谢! Java提供了两种创建线程方法: 通过实现Runable接口: 通过继承Thread类本身. 1 .声明实现 Runnable 接口的类,该类然后实现 run 方法.然后可以分配该类的实例,在创建 Thread 时作为一个参数来传递并启动.例如,计算大于某一规定值的质数的线程可以写成: class PrimeRun implements Runnable { long minPrime; PrimeRun(long minPrime) { th

Java解析XML的四种方法详解_java

XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document Type Definition),SAX(Simple API for XML),XSD(Xml Schema Definition),XSLT(Extensible Stylesheet Language Transform

JAVA实现多线程的两种方法

参考URL:   http://www.cnblogs.com/jbelial/archive/2013/03/17/2964472.html 1.继承 java.lang.Thread 类. 2.实现Runnable 接口. class ThreadText extends Thread { public void run() { for (int a=0; a<10; a++) { System.out.println(currentThread().getName() + ":-1:

Oracle获取LOB长度的两种方法效率对比

前两天写了一篇文章,介绍LENGTH等一系列的常规函数一样可以处理LOB类型,有人在BLOG回复中提到,使用LENGTH的效率要比DBMS_LOB.GETLENGTH低,这里进行简单的测试. 建立一个测试表: SQL> CREATE TABLE T_LOB (ID NUMBER, CONTENTS CLOB); Table created. SQL> DECLARE 2     V_LOB CLOB; 3  BEGIN 4        INSERT INTO T_LOB 5     VALU