关于Java中的Map遍历方式比较

最近在看阿里巴巴最新版的Java开发手册,里面的内容还是很值得去阅读学习,下面是我对Java中Map的遍历方式的比较和总结:

第一种:使用entrySet()的形式来遍历,也是效率高,推荐使用的一种遍历map的方式:

 Map<String, String> map = new HashMap<>();
 map.put("x", "aaa");
map.put("y", "bbb");
for (Map.Entry<String,String> entry:map.entrySet()){
    System.out.println(entry.getKey()+ "---" + entry.getValue());
}

打开entrySet()的源码可以看到:

Set<Map.Entry<K, V>> entrySet();

该方法返回的是一个Set集合,集合中的类型是一个Map.Entry<K,V>类型,其中Entry<K,V>对象中保存的就是map中的键值对映射,所以,调用entrySet()方法,是直接返回一个K-V键值对,所以我们就可以直接对Map.Entry<K,V>对象调用getKey()getValue()方法来获取map中的键和对应的值。其中Entry是一个interface,属于Map接口中的,而且Entry接口有getValue(),getKey(),remove(),setValue()等方法。
优点:直接返回一个k-v对象
第二种:使用keySet()方法进行遍历,代码实现如下:

Map<String, String> map = new HashMap<>();
map.put("x", "aaa");
map.put("y", "bbb");
Iterator<String> iteratorMap =  map.keySet().iterator();
while (iteratorMap.hasNext()){
    System.out.println(iteratorMap.next() + "====" + map.get(iteratorMap.next()));
}

keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从hashMap中取出key所对应的value
第三种:使用JDK 8中的Map.foreach()操作:

 Map<String, String> map = new HashMap<>();
 map.put("x", "aaa");
 map.put("y", "bbb");
 map.forEach((k,v)-> System.out.println(k + "---" +v));

在JDK 1.8中Map接口中增加了默认的实现,点击map.foreach()可以看到如下源码:

  default void forEach(BiConsumer<? super K, ? super V> action) {
        Objects.requireNonNull(action);
        for (Map.Entry<K, V> entry : entrySet()) {
            K k;
            V v;
            try {
                k = entry.getKey();
                v = entry.getValue();
            } catch(IllegalStateException ise) {
                // this usually means the entry is no longer in the map.
                throw new ConcurrentModificationException(ise);
            }
            action.accept(k, v);
        }
    }

JAVA 8的新特性就是增加了函数式编程,里面的实现还是利用entrySet()来实现map集合的遍历。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值