Java~遍历Map集合以及实现了Map的接口类(HashMap、TreeMap、LinkedHashMap、Hashtable)的四种方式

前言

Map集合的遍历与List和Set集合不同。Map有两组值,因此遍历时可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历。Map以及实现Map类的接口(如HashMap\TreeMap\LinkedHashMap\Hashtable等)都可以用以下几种方式遍历。

获得键值对

根据键值对来找键和值。

  • 通过map.entrySet()方法可以获取所有的key-value集合。
  • 遍历该集合,获取每一个键值对对象。
  • 由键值对对象,获取key键和value值。分别用entry.getkey()方法entry.getValue()方法。
public class TestMain {
    public static void main(String[] args) {
        Map<String,String> map=new HashMap<>();
        map.put("abx","sgc");
        map.put("okl","cut");
        map.put("xgs","okd");
        for(Map.Entry<String,String> entry:map.entrySet()){
            String mapkey=entry.getKey();
            String mapValue=entry.getValue();
            System.out.println(mapkey+":"+mapValue);
        }
    }
     }

只获得key或者value

不需要遍历整个键值对,只需要单纯的遍历键或者值。用map.values()方法或者map.keySet()方法

public static void main(String[] args) {
        Map<String,String> map=new HashMap<>();
        map.put("abx","sgc");
        map.put("okl","cut");
        map.put("xgs","okd");
        //得到key的集合
        for (String key:map.keySet()) {
            System.out.println(key);
        }
        //得到value的集合
        for (String value:map.values()) {
            System.out.println(value);
        }
    }

根据key找value

通过键找值遍历,这种方式的效率比较低,因为本身从键取值是比较耗时的操作。

  • 获取所有的 key集合。map.ketSet()
  • 遍历key集合。
  • 根据key到集合中去找value。map.get(key)
   public static void main(String[] args) {
        Map<String,String> map=new HashMap<String,String>();
         map.put("abx","sgc");
         map.put("okl","cut");
         map.put("xgs","okd");
        for(String key:map.keySet()){
            String value=map.get(key);
            System.out.println(key+":"+value);
        }
    }

迭代器遍历(Iterator)

    public static void main(String[] args) {
        Map<String,String> map=new HashMap<String,String>();
          map.put("abx","sgc");
          map.put("okl","cut");
          map.put("xgs","okd");
        Iterator<Map.Entry<String,String>> entries=map.entrySet().iterator();
        while(entries.hasNext()){
            Map.Entry<String,String> entry=entries.next();
            String key=entry.getKey();
            String value=entry.getValue();
            System.out.println(key+":"+value);
        }
    }

总结

在《阿里巴巴Java开发手册》中,有一条规约:【推荐】使用entrySet遍历Map类集合KV,而不是keySet方式进行遍历。 说明:keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从hashMap中取出key所对应的value。而entrySet只是遍历了一次就把key和value都放到了entry中,效率更高。
如图:

在这里插入图片描述
一般情况下,遍历Map集合时,用entrySet()同时遍历出键值对,效率更高。

文章参考:
https://blog.csdn.net/HaHa_Sir/article/details/83310848

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值