Map集合中values()、keySet()、entrySet()的性能比较

Map集合中三种方法的简介:

values():获取集合中的所有的value值;

keySet():将Map中所有的key存放到Set集合中。应为Set集合有迭代器,可以通过迭代器循环key,在通过get()方法,得到每个key所对应的value;

entrySet():Set<Map.Entry<K,V>> entrySet() //返回此映射中包含的映射关系的 Set 视图。 Map.Entry表示映射关系。entrySet():迭代后可以e.getKey(),e.getValue()取key和value。返回的是Entry接口 。

package com.dbzhang.demo;
/***
 * 
 */
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class MapFunction {

	public static void main(String[] args) {
		Map<String,String> map = new HashMap<String,String>();
		map.put("01", "a");
		map.put("02", "b");
		map.put("03", "c");
		map.put("04", "d");
		
		/**通过values()方法,获取集合中所有的值**/
		Collection<String> collection = map.values();
		System.out.println(collection);
		
		/**通过keySet()方法将所有的key值存放到Set集合中,Set集合中有迭代器**/
		Iterator<String> iterator = map.keySet().iterator();
		while(iterator.hasNext()){
			String key = iterator.next();
			System.out.println("key="+key+"  "+map.get(key));
		}
		
		/**通过entrySet()方法将key和value存放到Set集合中,Set集合中有迭代器**/
		Set<Entry<String,String>> entry = map.entrySet();
		Iterator<Entry<String,String>> iterators = entry.iterator();
		while(iterators.hasNext()){
			Entry<String,String> entrys  = iterators.next();
			System.out.println("key="+entrys.getKey()+"&&value="+entrys.getValue());
		}
	}

}

返回的结果如图:



汇总:

(1)Set<K> keySet():返回值是个只存放key值的Set集合(集合中无序存放的),迭代后只能通过get()取key。

(2)Set<Map.Entry<K,V>> entrySet():返回映射所包含的映射关系的Set集合(一个关系就是一个键-值对),就是把(key-value)作为一个整体一对一对地存放到Set集合当中的。迭代后可以e.getKey(),e.getValue()取key和value。返回的是Entry接口。

(3)虽然使用keyset及entryset来进行遍历能取得相同的结果,但两者的遍历速度是有差别的,keySet()的速度比entrySet()慢了很多,也就是keySet方式遍历Map的性能不如entrySet性能好,为了提高性能,以后多考虑用entrySet()方式来进行遍历。


参看技术博客:https://blog.csdn.net/kfengqingyangk/article/details/53288152


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值