JAVA集合之Map集合遍历

Map集合比较特殊,它和Set集合一样是无序的。但是Map集合并没有实现Iterator接口,所以无法直接通过Iterator迭代器的方式来遍历Map集合。它是间接的通过Set集合的迭代器来遍历集合中的元素的。

第一种在foreach循环中通过entrySet遍历元素

	Map<String,String> hashMap = new HashMap<>();
		
		for(int i = 0; i < 100000; ++i) {
			hashMap.put(i+"", i+"");
		}
		
		Long hashMapStart = System.currentTimeMillis();
		for(Map.Entry<String, String> entry : hashMap.entrySet()) {
			String key = entry.getKey();
			String value = entry.getValue();
		}
		Long hashMapTime = System.currentTimeMillis() - hashMapStart;
		System.out.println("foreach中通过entrySet遍历Map集合耗时:"+hashMapTime);

结果为
在这里插入图片描述
在foreach循环中通过entrySet的方式来遍历Map集合所耗费的时间不多,并且这种方式可以将Map集合中的key和value值都取出来。在大多数情况下都会采用这种办法。

第二种通过foreach循环遍历Map集合中的key或者value值

public static void main(String[] args) {

		Map<String, String> hashMap = new HashMap<>();

		for (int i = 0; i < 100000; ++i) {
			hashMap.put(i + "", i + "");
		}

		Long hashMapStart = System.currentTimeMillis();
		for (String key : hashMap.keySet()) {
			//do something
		}
		Long hashMapTime = System.currentTimeMillis() - hashMapStart;
		System.out.println("foreach中通过遍历Map集合中的key值耗时:" + hashMapTime);

		Long hashMapStart1 = System.currentTimeMillis();
		for (String value : hashMap.values()) {
			//do something;
		}
		Long hashMapTime1 = System.currentTimeMillis() - hashMapStart1;
		System.out.println("foreach中通过遍历Map集合中的value值耗时:" + hashMapTime1);

	}

结果为
在这里插入图片描述
从结果我们可以知道,通过foreach循环方式来遍历Map集中的key值或者value值比通过entrySet遍历Map集合中元素的值耗时更少。而且代码也更简洁,但是具有一定的局限性,它只能遍历元素的key或者value值,无法像entrySet的方式一样将key和value值一起全部遍历出来。在只需要遍历元素的key值或者value值时推荐使用这种方式。

第三种通过Iterator的方式遍历Map集合

	public static void main(String[] args) {

		Map<String, String> hashMap = new HashMap<>();

		for (int i = 0; i < 100000; ++i) {
			hashMap.put(i + "", i + "");
		}
		Iterator<Map.Entry<String, String>> iterator = hashMap.entrySet().iterator();
		Long hashMapStart = System.currentTimeMillis();
		while (iterator.hasNext()) {
			Map.Entry<String, String> entry = iterator.next();
			//do something
		}
		Long hashMapTime = System.currentTimeMillis() - hashMapStart;
		System.out.println("通过Iterator遍历Map集合中的元素耗时:" + hashMapTime);

	}

结果为
在这里插入图片描述
从结果上我们可以知道,虽然这种方式相对来说代码不够简洁,但是通过Iterator方式来遍历Map集合和通过第二种方式来遍历key或者value值耗时很接近,并且这种方式可以同时遍历Map集合中元素的key值或者value值。

第四种通过key值取得vaule值

public static void main(String[] args) {

		Map<String, String> hashMap = new HashMap<>();

		for (int i = 0; i < 100000; ++i) {
			hashMap.put(i + "", i + "");
		}
		
		Long hashMapStart = System.currentTimeMillis();
		for(String key : hashMap.keySet()) {
			String vaule = hashMap.get(key);
			//do something
		}
		Long hashMapTime = System.currentTimeMillis() - hashMapStart;
		System.out.println("通过key取得Map集合中元素的value值耗时:" + hashMapTime);
	}

结果为
在这里插入图片描述
通过这种方式来取得Map集合中元素的value值虽然代码看起来很简洁,但是却是耗时最多的。因为通过key值来从集合中取得value值是一个很耗时的操作,所以这种方式也不推荐使用。

说在最后
本次的遍历都是在10万条数据下,因此具有一定的局限性仅仅作为一个参考。还希望大家可以自己动手多去尝试,如果有什么不正之处还望指教。

其他集合的遍历可以参考我的其他文章
JAVA集合之List集合遍历
JAVA集合之Set集合遍历

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值