HashMap循环迭代的5种方式

面试的时候被问了hashmap迭代方式有几种,现记录以下5种方式,方便日后使用:    

Map<String,MediaEquipment> map=new HashMap<>(2);
    MediaEquipment mediaEquipment=new MediaEquipment();
    mediaEquipment.setEquipmentId(1001L);
    mediaEquipment.setEquipmentNum("设备1");
    MediaEquipment mediaEquipment1=new MediaEquipment();
    mediaEquipment1.setEquipmentId(1002L);
    mediaEquipment1.setEquipmentNum("设备2");
    map.put(mediaEquipment.getEquipmentId().toString(),mediaEquipment);
    map.put(mediaEquipment1.getEquipmentId().toString(),mediaEquipment1);

//    1、 通过ForEach循环进行遍历(常用)
    System.out.println("第1种:");
    for (Map.Entry entry:map.entrySet()) {
      System.out.println("key"+entry.getKey()+"--values"+entry.getValue());
    }
//    2、 ForEach迭代键值对方式
    System.out.println("第2种:");
    for (String key:map.keySet()) {
      System.out.print(key+",");
    }
    System.out.println();
    for (MediaEquipment me:map.values()) {
      System.out.println(JSON.toJSONString(me));
    }
//    3、使用带泛型的迭代器进行遍历
    System.out.println("第3种:");
    Iterator<Entry<String, MediaEquipment>> entries = map.entrySet().iterator();
    while (entries.hasNext()) {
      Map.Entry<String, MediaEquipment> entry = entries.next();
      System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
    }
//    4、使用键的迭代器进行遍历
    System.out.println("第4种:");
    Iterator<String> entsets = map.keySet().iterator();
    while (entsets.hasNext()) {
      System.out.println("Key = " + map.get(entsets.next()) + ", Value = " + JSON.toJSONString(map.get(entsets.next())));
    }
//    5、通过Java8 Lambda表达式遍历
    map.forEach((k, v) -> System.out.println("第5种:key: " + k + " value:" + v));

其中第5种还是采用第第一种模式进行迭代封装,源码如下:

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);
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值