精华内容
下载资源
问答
  • Java中如何遍历Map对象的4种方法

    万次阅读 多人点赞 2013-09-05 10:19:21
    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法。我们看一下最常用的方法及其优缺点。 既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, ...

     

    在Java中如何遍历Map对象

    How to Iterate Over a Map in Java

    在java中遍历Map有不少的方法。我们看一下最常用的方法及其优缺点。

    既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHashMap, Hashtable, 等等)

     

    方法一 在for-each循环中使用entries来遍历

    这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。

    Map<Integer, Integer> map = new HashMap<Integer, Integer>();
    
    for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
    
        System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
    
    }

     

     

    注意:for-each循环在java 5中被引入所以该方法只能应用于java 5或更高的版本中。如果你遍历的是一个空的map对象,for-each循环将抛出NullPointerException,因此在遍历前你总是应该检查空引用。

     

     

     

    方法二 在for-each循环中遍历keys或values。

    如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。

    Map<Integer, Integer> map = new HashMap<Integer, Integer>();
    
    //遍历map中的键
    
    for (Integer key : map.keySet()) {
    
        System.out.println("Key = " + key);
    
    }
    
    //遍历map中的值
    
    for (Integer value : map.values()) {
    
        System.out.println("Value = " + value);
    
    }

     

     

    该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。

     

     

     

    方法三使用Iterator遍历

    使用泛型:

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

     

     

    不使用泛型:

     

     

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

     

     

    你也可以在keySet和values上应用同样的方法。

     

     

    该种方式看起来冗余却有其优点所在。首先,在老版本java中这是惟一遍历map的方式。另一个好处是,你可以在遍历时调用iterator.remove()来删除entries,另两个方法则不能。根据javadoc的说明,如果在for-each遍历中尝试使用此方法,结果是不可预测的。

    从性能方面看,该方法类同于for-each遍历(即方法二)的性能。

     

    方法四、通过键找值遍历(效率低)

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

     

     

    作为方法一的替代,这个代码看上去更加干净;但实际上它相当慢且无效率。因为从键取值是耗时的操作(与方法一相比,在不同的Map实现中该方法慢了20%~200%)。如果你安装了FindBugs,它会做出检查并警告你关于哪些是低效率的遍历。所以尽量避免使用。

     

     

     

    总结

    如果仅需要键(keys)或值(values)使用方法二。如果你使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。否则使用方法一(键值都要)。

     

    展开全文
  • 如何遍历Map

    2017-07-24 22:36:26
    Map集合没有实现iterator接口,所以没有办法直接遍历,要把Map转化为Set集合,利用entrySet()转化的se集合。每一个元素都是一个Entry.而Entry是Map中内部的一个类,而且是一个参数话类型的类 例如: Map maps = new...

    Map集合没有实现iterator接口,所以没有办法直接遍历,要把Map转化为Set集合,利用entrySet()转化的se集合。每一个元素都是一个Entry.而Entry是Map中内部的一个类,而且是一个参数话类型的类

    例如:

    Map<String,Integer> maps = new HashMap<String,Integer>();

    maps.put("悟能",20);

    maps.put("悟空",21);

    maps.put(""悟净,19);

    Set<Map.Entry<String,Integer>>  entrySet = maps.entrySet();

    //遍历这个集合,每一个元素都是一个参数化类型的Map.Entry;Map.Entry得到就是Map内部的Entry类

    for(Map.Entry<String,Integer> entry:entrySet){

          System.out.println(entry.getKey()+"   :    "+entry.getVlaue());

    }



    展开全文
  • 如何遍历MAP

    2009-03-12 18:58:00
    import java.util.HashMap; import java.util.Iterator;... /** * 如何遍历Map。 * 第一步,得到keySet,也就是键值的集合 * 第二步,循环每个键,可以用迭代器 * 第三步,对每个键进行读取 * * @a

     

    1. import java.util.HashMap;   
    2. import java.util.Iterator;   
    3. import java.util.Map;   
    4.   
    5. /**  
    6.  * 如何遍历Map。<br>  
    7.  * 第一步,得到keySet,也就是键值的集合<br>  
    8.  * 第二步,循环每个键,可以用迭代器<br>  
    9.  * 第三步,对每个键进行读取<br>  
    10.  *   
    11.  * @author 老紫竹研究室(laozizhu.com)  
    12.  */  
    13. public class Test {   
    14.   public static void main(String[] args) {   
    15.     Map map = new HashMap();   
    16.     map.put("1 ""2 ");   
    17.     map.put("2 ""3 ");   
    18.     Iterator i = map.keySet().iterator();   
    19.     while (i.hasNext()) {   
    20.       System.out.println(map.get(i.next()));   
    21.     }   
    22.   }   
    23. }  
    展开全文
  • 如何遍历map集合

    2020-04-06 14:41:55
    如何遍历map集合 原创 ...

    如何遍历map集合

     Map集合是基于java核心类——java.util中的;

    Map集合用于储存元素对,Map储存的是一对键值(key和value),是通过key映射到它的value

    values() : 是获取集合中的所有的值----没有键,没有对应关系。

    KeySet() : 将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。 迭代后只能通过get()取key 。

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

    for each遍历

    1. import java.util.Iterator;
    2. import java.util.Map;
    3. /**
    4. * @Title: mapTest
    5. * @Description:
    6. * @author 阿伟
    7. * @createTime 2018年11月26日下午7:31:03
    8. */
    9. public class mapTest {
    10. public static void main(String[] args) {
    11. Map<String, String>map = new HashMap<String,String>();
    12. map.put("student1", "阿伟");
    13. map.put("student2", "小李");
    14. map.put("student3", "小张");
    15. map.put("student4", "小王");
    16. //
    17. // //1.使用entrySet()遍历
    18. System.out.println("使用entrySet()遍历");
    19. Iterator it = map.entrySet().iterator();
    20. while (it.hasNext()) {
    21. Map.Entry entry =(Map.Entry) it.next();
    22. Object key = entry.getKey();
    23. Object value = entry.getValue();
    24. System.out.println("key="+key+" value"+value);
    25. }
    26. //2.通过Map.Keyset遍历key和value,普遍使用,二次取值
    27. System.out.println("通过Map.Keyset遍历key和value,普遍使用,二次取值");
    28. for(String key:map.keySet()){
    29. System.out.println("Key="+key+"\tvalue="+map.get(key));
    30. }
    31. //3通过map.values()遍历所有的value,但不能遍历key
    32. System.out.println("通过map.values()遍历所有的value,但不能遍历key");
    33. for(String v:map.values()){
    34. System.out.println("value="+v);
    35. }
    36. //4通过map.entrySet遍历key和value(推荐使用,特别是容量大时)
    37. System.out.println("通过map.entrySet遍历key和value(推荐使用,特别是容量大时)");
    38. for(Map.Entry<String, String> entry:map.entrySet()){
    39. System.out.println("key="+entry.getKey()+"\tvalue="+entry.getValue());
    40. }
    41. }
    42. }

     --------------------测试结果-----------------------------------

    有一个疑问,为什么遍历顺序为2143  ?请大神回答 

                          <li class="tool-item tool-active is-like "><a href="javascript:;"><svg class="icon" aria-hidden="true">
                              <use xlink:href="#csdnc-thumbsup"></use>
                          </svg><span class="name">点赞</span>
                          <span class="count">2</span>
                          </a></li>
                          <li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;popu_824&quot;}"><svg class="icon" aria-hidden="true">
                              <use xlink:href="#icon-csdnc-Collection-G"></use>
                          </svg><span class="name">收藏</span></a></li>
                          <li class="tool-item tool-active is-share"><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;1582594662_002&quot;}"><svg class="icon" aria-hidden="true">
                              <use xlink:href="#icon-csdnc-fenxiang"></use>
                          </svg>分享</a></li>
                          <!--打赏开始-->
                                                  <!--打赏结束-->
                                                  <li class="tool-item tool-more">
                              <a>
                              <svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg>
                              </a>
                              <ul class="more-box">
                                  <li class="item"><a class="article-report">文章举报</a></li>
                              </ul>
                          </li>
                                              </ul>
                  </div>
                              </div>
              <div class="person-messagebox">
                  <div class="left-message"><a href="https://blog.csdn.net/Ren_gw">
                      <img src="https://profile.csdnimg.cn/9/2/C/3_ren_gw" class="avatar_pic" username="Ren_gw">
                                              <img src="https://g.csdnimg.cn/static/user-reg-year/1x/2.png" class="user-years">
                                      </a></div>
                  <div class="middle-message">
                                          <div class="title"><span class="tit"><a href="https://blog.csdn.net/Ren_gw" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}" target="_blank">Ren_gw</a></span>
                                              </div>
                      <div class="text"><span>发布了33 篇原创文章</span> · <span>获赞 10</span> · <span>访问量 1万+</span></div>
                  </div>
                                  <div class="right-message">
                                              <a href="https://im.csdn.net/im/main.html?userName=Ren_gw" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-letter">私信
                          </a>
                                                              <a class="btn btn-sm  bt-button personal-watch" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}">关注</a>
                                      </div>
                              </div>
                      </div>
      </article>
      
    展开全文
  • JS中如何遍历Map和List

    2021-04-27 14:24:02
    JS中如何遍历Map和List?遍历Map遍历元素是Map的List 遍历Map 直接上代码: for(var key in map){ console.log(“属性:” + key + “,值:” + map[key]); } 遍历元素是Map的List 直接上代码: var arr = [{a:1,b:2...
  • 如何遍历map对象

    2017-05-17 17:29:58
    如何遍历map对象 现在有一个Map类型的orderMaps对象,遍历将其赋值给另一个Map类型的params对象: for (Map.Entry entry : orderMaps.entrySet()) { if (params.containsKey(entry.getKey())) { continue; }else...
  • 在Java中如何遍历Map对象 How to Iterate Over a Map inJava 在java中遍历Map有不少的方法。我们看一下最常用的方法及其优缺点。 既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap...
  • 如何遍历Map集合中的值

    千次阅读 2017-10-20 15:33:46
    如何遍历Map集合中的值
  • 博文《Java中如何遍历map》源码。可以直接粘贴博文中源码 也可以下载它,免费了。
  • Java中如何遍历Map对象

    2017-06-15 15:02:18
    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法。我们看一下最常用的方法及其优缺点。 既然java中的所有map都实现了Map接口,以下方法适用于任何map实现...
  • 如何遍历Map中的对象

    千次阅读 2016-08-14 21:53:48
    众所周知,java中Iterator、Collection和Map都是顶层接口。在遍历集合Collection时,可以使用迭代器Iterator,加快遍历速度。但是对于Map不是集合,内部不含有iterator,那么该如何遍历Map中的对象呢?
  • 如何遍历Map,map的keySet()和EntrySet()区别 遍历map public static void main(String[] args) { // TODO Auto-generated method stub Map&lt;String, Student&gt; map = new HashMap&lt;String,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,295
精华内容 518
关键字:

如何遍历map