今天讲解的主要是使用多种方式来实现遍历HashMap取出Key和value,首先在java中如果想让一个集合能够用for增强来实现迭代,那么此接口或类必须实现Iterable接口,那么Iterable究竟是如何来实现迭代的,在这里将不做讲解,下面主要讲解一下遍历过程。

1
2
3
4
5
6
//定义一个泛型集合
Map<String, String> map = new HashMap<String, String>();
//通过Map的put方法向集合中添加数据
    map.put("001", "刘备");
    map.put("002", "曹操");
    map.put("003", "孙权");

方式一:使用该Map接口的KeySet方法来实现

问题:我们都知道Map接口并没有实现Iterable接口,为什么能用他的KetSet方法就能实现迭代呢?

解析:因为KeySet方法返回此映射中包含的键的 Set 视图,这个方法竟然能返回一个Set试图,也就说他的返回值类型是一个Set接口,我们可以通过API文档看到Set接口他是实现了Iterable接口,所以能实现迭代。

1
2
3
4
5
6
//调用KeySet方法放回一个Set接口类型
    Set<String> set = map.keySet();
    //使用for增强来取出key和value
    for (String item : set) {
      System.out.println("Key是:" + item + ";Value值是:" + map.get(item));
    }

方式二:使用Map接口的Values方法实现(for增强)

同理:调用Map接口的values方法他放回一个Collection试图,Collection接口他又实现了Iterable接口,所以能够迭代。

1
2
3
4
Collection<String> con = map.values();
    for (String item : con) {
      System.out.println("Value值是:" + item);
    }

方式三:使用Map接口的entrySet方法实现(for增强)

entrySet:entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry,Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。

1
2
3
4
5
Set<Entry<String, String>> setentry = map.entrySet();
    for (Entry<String, String> item : setentry) {
      System.out.println("Key是:" + item.getKey() + ";Value值是:"
          + item.getValue());
    }

方式四:使用Map接口的keySet().Iterable()(while循环)

Iterable():返回在此 set 中的元素上进行迭代的迭代器。返回的元素没有特定的顺序(除非此 set 是某个提供顺序保证的类的实例)。返回值类型Iterator<E>

1
2
3
4
Iterator<String> it = map.keySet().iterator();
//如果仍有元素可以迭代,则返回 true。    while (it.hasNext()) {     //获取Key值
   String key = it.next();   System.out.println("Key是:" + key + ";Value值是:" + map.get(key));
   }

方式五:使用Map接口的value.Iterable()(while循环)

1
2
3
4
5
Iterator<String> it1 = map.values().iterator();
    while (it1.hasNext()) {
      String value = it1.next();
      System.out.println("Value值是:" + value);
    }

方式六:使用Map接口的entrySet().Iterable()(while循环)

1
2
3
4
5
Iterator<Entry<String, String>> it2 = map.entrySet().iterator();
    while (it2.hasNext()) {
      Entry<String,String> entry=it2.next();
      System.out.println("Key是:" + entry.getKey() + ";Value值是:" + entry.getValue());
    }

HashMap的几种遍历方式(转载)的更多相关文章

  1. HashMap的两种遍历方式

    HashMap的两种遍历方式 HashMap存储的是键值对:key-value . java将HashMap的键值对作为一个整体对象(java.util.Map.Entry)进行处理,这优化了Hash ...

  2. HashMap 中7种遍历方式的性能分析

    随着 JDK 1.8 Streams API 的发布,使得 HashMap 拥有了更多的遍历的方式,但应该选择那种遍历方式?反而成了一个问题. 本文先从 HashMap 的遍历方法讲起,然后再从性能. ...

  3. HashMap 的 7 种遍历方式与性能分析

    前言 随着 JDK 1.8 Streams API 的发布,使得 HashMap 拥有了更多的遍历的方式,但应该选择那种遍历方式?反而成了一个问题. 本文先从 HashMap 的遍历方法讲起,然后再从 ...

  4. Java中的HashMap的2种遍历方式比较

    首先我们准备数据,准备一个map Map<String, String> map = new HashMap<String, String>(); for (int i = 0 ...

  5. 谨慎使用keySet:对于HashMap的2种遍历方式比较

    HashMap存储的是键值对,所以一般情况下其遍历同List及Set应该有所不同. 但java巧妙的将HashMap的键值对作为一个整体对象(java.util.Map.Entry)进行处理,这优化了 ...

  6. Map集合的四种遍历方式(转载)

    import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class TestMap { pu ...

  7. HashMap的四种遍历方式

    package com.xt.map; import java.util.HashMap; import java.util.Iterator; import java.util.Map; impor ...

  8. HashMap概述及其三种遍历方式

    一.HashMap概述: 1.HashMap是一个散列表,它存储的是键值对(key-value)映射: 2.HashMap继承AbstractMap,实现了Map,Cloneable,Serializ ...

  9. Map三种遍历方式

    Map三种遍历方式 package decorator; import java.util.Collection; import java.util.HashMap; import java.util ...

随机推荐

  1. 阶段1 语言基础+高级_1-3-Java语言高级_1-常用API_1_第4节 ArrayList集合_19-ArrayList练习四_筛选集合

    大集合里面循环装了20个int类型的随即数字 下面要自定义方法,这个方法专门负责筛选 遍历偶数的集合 重点是集合当做方法的参数,还能当做集合的返回值

  2. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_08 Map集合_7_HashMap存储自定义类型键值

    自定义类型做key值.必须要重写hashCode和equals方法 创建pserson类 有name个age两个成员变量.重写toString方法 key有重复,会被新的value值替换掉. key值 ...

  3. Robot Framework安装部署详细教程

    (转自“义甬君”) Robot Framework安装准备 说实话,在我玩了这么多自动化工具后,感觉Robot Framework所需的环境和安装过程是相对比较繁琐和复杂的.要真正搭建一套可以使用的R ...

  4. Ora01653 :是表空间不足

    解决方案:表空间中增加数据文件: ALTER TABLESPACE 表空间名称ADD DATAFILE 'D:\app\Administrator\oradata\orcl\Ibomis1.dbf' ...

  5. protel封装总结(新手必看)

    零件封装是指实际零件焊接到电路板时所指示的外观和焊点的位置.是纯粹的空间概念.因此不同的元件可共用同一零件封装,同种元件也可有不同的零件封装.像电阻,有传统的针插式,这种元件体积较大,电路板必须钻孔才 ...

  6. 黑群晖DSM 6.x 配置文件grub.cfg修改 mac地址/sn等修改

    新的DSM 6.x配置文件和以前的XPEnoboot的配置文件不一样了,我们可以通过OSFMount虚拟光驱软件打开img后再修改. 安装完成后运行OSFMount点击左下角-Mount new,选择 ...

  7. TensorFlow学习笔记8-深度学习的正则化

    深度学习的正则化 回顾一些基本概念 概念 描述 设计矩阵 数据集在特征向量上的表示 训练误差 学习到的模型与训练集标签之间的误差 泛化误差(测试误差) 学习到的模型与测试集之间的误差 欠拟合 模型的训 ...

  8. mooc-IDEA 列操作--005

    十一.IntelliJ IDEA -列操作 实例:根据HTTP请求JSON文件,生成一个枚举类 Step1:创建一个枚举类,把要转换的JSON串粘贴进来. 最终要实现效果 Step2:选中第一个100 ...

  9. github javascript相关项目star数排行榜(前30,截止2016.11.18):

    github javascript相关项目star数排行榜(前30,截止2016.11.18): 前端开源框架 TOP 100 前端 TOP 100:::::https://www.awesomes. ...

  10. django shell的基本使用

    作者:python技术人 博客:https://www.cnblogs.com/lpdeboke/ 在日常工作再发中,经常需要测试一些对象.函数.类...等是否正确,但是如果整体运行项目特别麻烦,并且 ...