hashmap遍历

http://blog.csdn.net/scgyus/

方法1:使用For-Each迭代entries

这是最常见的方法,并在大多数情况下更可取的。当你在循环中需要使用Map的键和值时,就可以使用这个方法


   
   
  1. Map< Integer, Integer> map = new HashMap< Integer, Integer>();
  2. for(Map.Entry< Integer, Integer> entry : map.entrySet()){
  3. System.out.println( "key = " + entry.getKey() + ", value = " + entry.getValue())
  4. }

注意:For-Each循环是Java5新引入的,所以只能在Java5以上的版本中使用。如果你遍历的map是null的话,For-Each循环会抛出NullPointerException异常,所以在遍历之前你应该判断是否为空引用。

方法2 使用For-Each迭代keys和values

如果你只需要用到map的keys或values时,你可以遍历KeySet或者values代替entrySet


   
   
  1. Map< Integer, Integer> map = new HashMap< Integer, Integer>();
  2. //iterating over keys only
  3. for ( Integer key : map.keySet()) {
  4. System.out.println( "Key = " + key);
  5. }
  6. //iterating over values only
  7. for ( Integer value : map.values()) {
  8. System.out.println( "Value = " + value);
  9. }

这个方法比entrySet迭代具有轻微的性能优势(大约快10%)并且代码更简洁

方法3 使用Iterator迭代

使用泛型


   
   
  1. Map< Integer, Integer> map = new HashMap< Integer, Integer>();
  2. Iterator<Map.Entry< Integer, Integer>> entries = map.entrySet(). iterator();
  3. while (entries.hasNext()) {
  4. Map.Entry< Integer, Integer> entry = entries.next();
  5. System.out.println( "Key = " + entry.getKey() + ", Value = " + entry.getValue());
  6. }

不使用泛型


   
   
  1. Map map = new HashMap();
  2. Iterator entries = map.entrySet(). iterator();
  3. while (entries.hasNext()) {
  4. Map.Entry entry = (Map.Entry) entries.next();
  5. Integer key = ( Integer)entry.getKey();
  6. Integer value = ( Integer)entry.getValue();
  7. System.out.println( "Key = " + key + ", Value = " + value);
  8. }

你可以使用同样的技术迭代keyset或者values

这个似乎有点多余但它具有自己的优势。首先,它是遍历老java版本map的唯一方法。另外一个重要的特性是可以让你在迭代的时候从map中删除entries的(通过调用iterator.remover())唯一方法.如果你试图在For-Each迭代的时候删除entries,你将会得到unpredictable resultes 异常。

从性能方法看,这个方法等价于使用For-Each迭代

方法4 迭代keys并搜索values(低效的)


   
   
  1. Map< Integer, Integer> map = new HashMap< Integer, Integer>();
  2. for ( Integer key : map.keySet()) {
  3. Integer value = map.get(key);
  4. System.out.println( "Key = " + key + ", Value = " + value);
  5. }

这个方法看上去比方法#1更简洁,但是实际上它更慢更低效,通过key得到value值更耗时(这个方法在所有实现map接口的map中比方法#1慢20%-200%)。如果你安装了FindBugs,它将检测并警告你这是一个低效的迭代。这个方法应该避免

代码演示:


   
   
  1. package com.gcc.interview;
  2. import java.util.HashMap;
  3. import java.util.Iterator;
  4. import java.util.Map;
  5. /**
  6. * HashMap 不同遍历方法比较
  7. * @author gcc
  8. *
  9. * 2018年1月22日
  10. */
  11. public class TestHashMap {
  12. public static void main(String[] args) {
  13. Map<Integer,String> map = new HashMap<Integer,String>();
  14. map.put( 1, "xiao");
  15. map.put( 2, "chao");
  16. map.put( 3, "shang");
  17. map.put( 4, "xue");
  18. //方法一
  19. for(Map.Entry<Integer,String> entry : map.entrySet()) {
  20. System.out.println( "方法一:key ="+entry.getKey()+ "---value="+entry.getValue());
  21. }
  22. //方法二
  23. for(Integer key:map.keySet()) {
  24. System.out.println( "方法二:key = "+key);
  25. }
  26. for(String value:map.values()) {
  27. System.out.println( "方法二:value = "+value);
  28. }
  29. //方法三
  30. Iterator<Map.Entry<Integer,String>> entries = map.entrySet().iterator();
  31. while(entries.hasNext()) {
  32. Map.Entry<Integer,String> entry = entries.next();
  33. System.out.println( "方法三:key = "+entry.getKey()+ "--value="+entry.getValue());
  34. }
  35. //方法四
  36. for(Integer key:map.keySet()) {
  37. String value = map.get(key);
  38. System.out.println( "方法四:Key = " + key + ", Value = " + value);
  39. }
  40. }
  41. }
可以根据不同需求选择不同遍历方法,但一般选择第一种方法就可以。
   
   

作者:scgyus

转载请注明出处:http://blog.csdn.net/scgyus/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值