黑马程序员_Java基础map遍历的比较

------- android培训java培训、期待与您交流! ----------

map的遍历有四种放肆,下面我对其分别罗列出来:

import java.util.HashMap;  
import java.util.Iterator;  
import java.util.Map;  
	  
public class Test {  
	  
    public static void main(String[] args) {  
	        Map<String, String> map = new HashMap<String, String>();  
	        map.put("aa", "aaa");  
	        map.put("bb", "bbb");  
	        map.put("cc", "ccc");  
	  
  
        // 第一种:通过Map.keySet遍历key和value  
	        System.out.println("第一种方式:-------->通过Map.keySet遍历key和value:");  
	        for (String key : map.keySet()) {  
	        		System.out.println("key= " + key + "  and  value= " + map.get(key));  
	        }  
	          
	     // 第二种:通过Map.entrySet使用iterator遍历key和value  
        System.out.println("第二种方式:-------->通过Map.entrySet使用iterator遍历key和value:");  
	        Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();  
	        while (it.hasNext()) {  
            Map.Entry<String, String> entry = it.next();  
	  
	            System.out.println("key= " + entry.getKey() + "  and  value= "  
	                    + entry.getValue());  
        }  
  
	      // 第三种:通过Map.entrySet遍历key和value  
        System.out.println("第三种方式:-------->通过Map.entrySet遍历key和value:");  
	        for (Map.Entry<String, String> entry : map.entrySet()) {  
            System.out.println("key= " + entry.getKey() + "  and  value= "  
                    + entry.getValue());  
        }  
  
             // 第四种:通过Map.values()遍历所有的value,但是不能遍历键key  
       System.out.println("第四种方式:-------->通过Map.values()遍历所有的value:");  
	        for (String v : map.values()) {  
            System.out.println("value= " + v);  
	        }  
    }  
	}  

结果如下:

第一种方式:-------->通过Map.keySet遍历key和value:
key= aa  and  value= aaa
key= bb  and  value= bbb
key= cc  and  value= ccc
第二种方式:-------->通过Map.entrySet使用iterator遍历key和value:
key= aa  and  value= aaa
key= bb  and  value= bbb
key= cc  and  value= ccc
第三种方式:-------->通过Map.entrySet遍历key和value:
key= aa  and  value= aaa
key= bb  and  value= bbb
key= cc  and  value= ccc
第四种方式:-------->通过Map.values()遍历所有的value:
value= aaa
value= bbb
value= ccc

这四种方法都可以遍历map

第一种是目前许多人最喜欢的一种方式,因为代码最少,看起来最简单,通过遍历keySet,再将key所对应的value查询出来,这里有一个二次取值的过程,所以并不推荐;

第二种和第三种原理是相同的,都是通过遍历Map.Entry的方式,将Entry中的key和value打印出来,第三种是比较推荐写法,因为采用jdk1.5后的遍历形式,代码看起来比较整洁;

第四种用的比较少了,因为我们大多数时候都是同时需要key和value的

综上所述,如果map里面内容比较少,其实采用哪种方式都可以,第一种和第三种相对简洁一些;但是一旦容量非常大时,更推荐采用第三种方式,相比于第一种将极大地节省性能。

测试性能程序:

import java.util.HashMap;  
import java.util.Map;  

public class Test {  
	
	    public static void main(String[] args) {  
	  
	    	long MAX = 100000L;  
	    	int TIMES = 10;  
	    	 
	    	Map<String, String> map1 = new HashMap<String, String>();  
	    	Map<String, String> map2 = new HashMap<String, String>();

	        for (long i = 0; i < MAX; i++){  
	    	            map1.put("a" + i, "aa" + i);  
	    	            map2.put("b" + i, "bb" + i);  
	    	 }  
	        
	        String value = "";   
	        String key= "";  
	        long startTime, endTime;  
	        double total = 0;  
  
  
	  
	       /**
	        * 通过Map.keySet遍历key和value
	        */
	        for (int j = 0; j < TIMES; j++) {  
	  
	            startTime = System.currentTimeMillis();  
	            for (String temp : map1.keySet()) {  
	                key = temp;  
	                value = map1.get(key);  
	            }  
	            endTime = System.currentTimeMillis();  
	            System.out.println("通过Map.keySet遍历key和value耗时 " + (endTime - startTime)  
	                    + " ms ");  
	        }  
	        
	          
	          
	      /**
	       *通过Map.entrySet遍历key和value  
	       */
	            startTime = System.currentTimeMillis();  
            for (Map.Entry<String, String> entry : map2.entrySet()) {  
	                key = entry.getKey();  
	                value = entry.getValue();  
	            }  
	            endTime = System.currentTimeMillis();  
	            System.out.println("通过Map.entrySet遍历key和value耗时 " + (endTime - startTime)  
	                    + " ms ");  
	        }  

	}
 
测试结果:

通过Map.keySet遍历key和value耗时 5 ms 
通过Map.keySet遍历key和value耗时 3 ms 
通过Map.keySet遍历key和value耗时 3 ms 
通过Map.keySet遍历key和value耗时 3 ms 
通过Map.keySet遍历key和value耗时 3 ms 
通过Map.keySet遍历key和value耗时 3 ms 
通过Map.keySet遍历key和value耗时 3 ms 
通过Map.keySet遍历key和value耗时 4 ms 
通过Map.keySet遍历key和value耗时 3 ms 
通过Map.keySet遍历key和value耗时 3 ms 
通过Map.entrySet遍历key和value耗时 7 ms 
如果把上面的数字改动的大一些,可能效果更明显,但是改大的话,电脑会卡死掉。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值