java keyset 遍历_Java Map遍历keySet、entrySet速度对比

第一种遍历方式(采用keySet):

HashMap hashmap = new HashMap();

Iterator iterator = hashmap.keySet().iterator();

while (iterator.hasNext()) {

hashmap.get(iterator.next());

}

}

第二种遍历方式(采用entrySet):

HashMap hashmap = new HashMap();

Iterator iterator = hashmap.entrySet().iterator()

while (iterator .hasNext()) {

Entry entry = (Entry) iterator .next();

entry.getValue();

}

}

JDK官方解释:

keySet:返回此映射中所包含的键的 set 视图。该集合受映射的支持,所以映射的变化也反映在该集合中,反之亦然。该集合支持元素的移除,通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作,从该映射中移除相应的映射关系。它不支持 add 或 addAll 操作。

entrySet:返回此映射所包含的映射关系的 collection 视图。在返回的集合中,每个元素都是一个 Map.Entry。该集合受映射的支持,所以映射的变化也反映在该集合中,反之亦然。该集合支持元素的移除,通过 Iterator.remove、Collection.remove、removeAll、retainAll 和 clear 操作,从该映射中移除相应的映射关系。它不支持 add 或 addAll 操作。

测试:创建两个HashMap,每个map中放入100万条数据,对其进行遍历,统计遍历所用的时间。

测试结果:(本机测试,机器不同速度也会不同)使用keySet遍历所用时间为200毫秒左右;使用entrySet遍历所用时间为120毫秒左右

测试代码:(可直接拷贝运行)

import java.util.Calendar;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map.Entry;

public class HashMapTest {

public static void main(String[] args) {

//第二种遍历方式

HashMap hashmap = new HashMap();

for (int i = 0; i < 1000000; i++) {

hashmap.put(i, "");

}

long bs = Calendar.getInstance().getTimeInMillis();

Iterator iterator = hashmap.keySet().iterator();

while (iterator.hasNext()) {

hashmap.get(iterator.next());

}

System.out.println(Calendar.getInstance().getTimeInMillis() - bs);

hashmap = null;//将对象赋值为null,不然内存溢出(仅针对本人笔记本……)

iterator = null;//将对象赋值为null,不然内存溢出(仅针对本人笔记本……)

//第二种遍历方式

HashMap hashmap2 = new HashMap();

for (int i = 0; i < 1000000; i++) {

hashmap2.put(i, "");

}

long bs2 = Calendar.getInstance().getTimeInMillis();

Iterator it2 = hashmap2.entrySet().iterator();

while (it2.hasNext()) {

Entry entry = (Entry) it2.next();

entry.getValue();

}

System.out.println(Calendar.getInstance().getTimeInMillis() - bs2);

}

}

keySet:由hashMap获取keySet,将keySet遍历,转为iterator,遍历iterator,从map中取出对应key的value

entrySet:由hash获取entrySet,entrySet中包含了key和value,遍历entrySet即可取出value

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值