当前位置: 欣欣网 > 码农

Map遍历 key-value 的4种方法

2024-05-09码农

四种方法

  • 先用 keySet() 取出所有key值,再取出对应value——增强for循环遍历

  • 先用 keySet() 取出所有key值,再取出对应value——使用迭代器遍历

  • 通过 entrySet 来获取 key-value ——增强for循环遍历

  • 通过 entrySet 来获取 key-value ——使用迭代器遍历

  • Map是java中的接口, Map.Entry 是Map的一个内部接口。Map提供了一些常用方法,如 keySet()、entrySet() 等方法, keySet() 方法返回值是Map中key值的Set集合; entrySet() 的返回值也是返回一个Set集合,此集合的类型为 Map.Entry<K, V>

    Map.Entry 是Map声明的一个内部接口,此接口为泛型,定义为 Entry<K,V> 。它表示Map中的一个实体(一个 key-value 对)。接口中有 getKey() , getValue 方法。

    准备

    构造HashMap,给hashMap添加元素

    HashMap hashMap = new HashMap();
    hashMap.put("三国演义","罗贯中");
    hashMap.put("水浒传","施耐庵");
    hashMap.put("西游记","吴承恩");
    hashMap.put("红楼梦","曹雪芹");

    遍历

    方法一:先用keySet()取出所有key值,再取出对应value——使用迭代器遍历
  • 代码

    /*1、先用keySet()取出所有key值,再取出对应value——增强for循环遍历*/
    System.out.println("====1、先用keySet()取出所有key值,再取出对应value——增强for循环遍历====");
    Set keyset = hashMap.keySet();
    for(Object key:keyset){
    System.out.println(key+"-"+hashMap.get(key));
    }

  • 运行结果

  • 方法二:先取出所有的key,再通过key取出对应的value——使用迭代器遍历
  • 代码

    /*2、先用keySet()取出所有key值,再取出对应value——使用迭代器遍历*/
    System.out.println("====2、先用keySet()取出所有key值,再取出对应value——使用迭代器遍历====");
    Iterator iterator = keyset.iterator();
    while(iterator.hasNext()){
    Object key = iterator.next();
    System.out.println(key+"-"+hashMap.get(key));
    }

  • 运行结果

  • 方法三:通过entrySet()获得key-value值——增强for循环遍历
  • 代码

    /*3、通过entrySet()获得key-value值——增强for循环遍历*/
    System.out.println("====3、通过entrySet()获得key-value值——增强for循环遍历====");
    Set set = hashMap.entrySet();
    for(Object key:set){
    Map.Entry entry = (Map.Entry) key;
    System.out.println(entry.getKey()+"-"+entry.getValue());
    }

  • 运行结果

  • 方法四:通过entrySet()获得key-value值——使用迭代器遍历
  • 代码

    /*4、通过entrySet()获得key-value值——使用迭代器遍历*/
    System.out.println("====4、通过entrySet()获得key-value值——使用迭代器遍历====");
    Set set1 = hashMap.entrySet();
    Iterator iterator1 = set1.iterator();
    while(iterator1.hasNext()){
    Object itset = iterator1.next();
    Map.Entry entry = (Map.Entry) itset;
    System.out.println(entry.getKey()+"-"+entry.getValue());
    }

  • 运行结果

  • 完整代码

    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    public classMapTraverse{
    publicstaticvoidmain(String[] args){
    HashMap hashMap = new HashMap();
    hashMap.put("三国演义","罗贯中");
    hashMap.put("水浒传","施耐庵");
    hashMap.put("西游记","吴承恩");
    hashMap.put("红楼梦","曹雪芹");
    /*1、先用keySet()取出所有key值,再取出对应value——增强for循环遍历*/
    System.out.println("====1、先用keySet()取出所有key值,再取出对应value——增强for循环遍历====");
    Set keyset = hashMap.keySet();
    for(Object key:keyset){
    System.out.println(key+"-"+hashMap.get(key));
    }
    /*2、先用keySet()取出所有key值,再取出对应value——使用迭代器遍历*/
    System.out.println("====2、先用keySet()取出所有key值,再取出对应value——使用迭代器遍历====");
    Iterator iterator = keyset.iterator();
    while(iterator.hasNext()){
    Object key = iterator.next();
    System.out.println(key+"-"+hashMap.get(key));
    }
    /*3、通过entrySet()获得key-value值——增强for循环遍历*/
    System.out.println("====3、通过entrySet()获得key-value值——增强for循环遍历====");
    Set set = hashMap.entrySet();
    for(Object key:set){
    Map.Entry entry = (Map.Entry) key;
    System.out.println(entry.getKey()+"-"+entry.getValue());
    }
    /*4、通过entrySet()获得key-value值——使用迭代器遍历*/
    System.out.println("====4、通过entrySet()获得key-value值——使用迭代器遍历====");
    Set set1 = hashMap.entrySet();
    Iterator iterator1 = set1.iterator();
    while(iterator1.hasNext()){
    Object itset = iterator1.next();
    Map.Entry entry = (Map.Entry) itset;
    System.out.println(entry.getKey()+"-"+entry.getValue());
    }
    }
    }

    应用举例

  • 问题描述

    使用HashMap添加3个员工对象,要求

  • 键:员工id

  • 值:员工对象 并遍历显示工资>18000的员工(遍历方式最少两种)员工类:姓名、工资、员工id

  • 代码

    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    /*使用HashMap添加3个员工对象,要求
    键:员工id
    值:员工对象
    并遍历显示工资>18000的员工(遍历方式最少两种)员工类:姓名、工资、员工id
    */
    public class MapExercise {
    public static void main(String[] args) {
    HashMap hashMap = new HashMap();
    hashMap.put(1, new employee("Tom", 20000.0, 1));
    hashMap.put(2, new employee("Jack", 10000.0, 2));
    hashMap.put(3, new employee("Bob", 30000.0, 3));
    hashMap.put(4, new employee("Marry", 17000.0, 4));
    /*1、通过keySet()获取所有key值,再得到对应的value值——增强for循环遍历*/
    System.out.println("====1、通过keySet()获取所有key值,再得到对应的value值——增强for循环遍历");
    Set keyset = hashMap.keySet();
    for (Object key : keyset) {
    employee m = (employee) hashMap.get(key);
    if (m.getSalary() > 18000) {
    System.out.println(m);
    }
    }
    /*2、通过entrySet()获取key-value值——使用迭代器遍历*/
    System.out.println("====2、通过entrySet()获取key-value值——使用迭代器遍历====");
    Set set = hashMap.entrySet();
    Iterator iterator = set.iterator();
    while (iterator.hasNext()) {
    Object itset = iterator.next();
    Map.Entry entry = (Map.Entry) itset;
    employee m = (employee) entry.getValue();
    if (m.getSalary() > 18000) {
    System.out.println(m);
    }
    }
    }
    }
    class employee{
    private String name;
    private Double salary;
    private int id;
    public employee(String name, Double salary, int id) {
    this.name = name;
    this.salary = salary;
    this.id = id;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public Double getSalary() {
    return salary;
    }
    public void setSalary(Double salary) {
    this.salary = salary;
    }
    public int getId() {
    return id;
    }
    public void setId(int id) {
    this.id = id;
    }
    @Override
    public String toString() {
    return"employee{" +
    "name='" + name + '\'' +
    ", salary=" + salary +
    ", id=" + id +
    '
    }';
    }
    }










  • 运行结果

  • 以上是基础的Map遍历方法,Java8简化了很多操作,效率上基本无差。

    来源:blog.csdn.net/qq_40839718/

    article/details/123622684

    >>

    END

    精品资料,超赞福利,免费领

    微信扫码/长按识别 添加【技术交流群

    群内每天分享精品学习资料

    最近开发整理了一个用于速刷面试题的小程序;其中收录了上千道常见面试题及答案(包含基础并发JVMMySQLRedisSpringSpringMVCSpringBootSpringCloud消息队列等多个类型),欢迎您的使用。

    👇👇

    👇点击"阅读原文",获取更多资料(持续更新中