• JAVA基础(四十五)——集合之Map接口


    一、目录

    • Map接口基本介绍
    • Map接口常用方法
    • Map接口遍历方式

    二、Map接口基本介绍

    针对JDK8中Map接口的特点

    1. Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value。
    2. Map中的Key和Value可以是任何引用类型的数据,会封装到HashMap$Node对象中。
    3. Map中的Key不允许重复,原因和HashSet一样。并且如果加入相同的Key,那么Value值将被后加入的替换掉。
    4. Map中的Value值可以重复。
    5. Map的Key可以为null,value也可以为null。但是只能有一个key为null
    6. 常用String类作为Map的Key。
    7. Key和Value之间存在单向一对一关系,即通过指定的Key总能找到对应的Value。
    8. Map存放数据的
    package com.javamap;
    
    import java.util.HashMap;
    
    public class JavaMap {
        public static void main(String[] args) {
            HashMap hashMap = new HashMap();
    
            hashMap.put("no1", "Lilei");
            hashMap.put("no2", "LiPing");
            hashMap.put(null, null);
    
            System.out.println(hashMap);
            System.out.println(hashMap.get(null));
        }
    }
    
    
    output:
    {no2=LiPing, null=null, no1=Lilei}
    null
    

    三、Map接口常用方法

    1. put:添加。
    2. remove:根据键值删除映射关系。
    3. get:根据键值获取值。
    4. size:获取元素个数。
    5. isEmpty:判断个数是否为0。
    6. clear:清除。
    7. containsKey:查找键是否存在。
    package com.javamap;
    
    import java.util.HashMap;
    
    public class JavaMap {
        public static void main(String[] args) {
            HashMap hashMap = new HashMap();
    
            hashMap.put("no1", "Lilei");
            hashMap.put("no2", "LiPing");
            hashMap.put(null, null);
            hashMap.put("no3", new Book("yyyy", 100));
    
            System.out.println(hashMap);
            System.out.println(hashMap.get(null));
    
            hashMap.remove(null);
    
            System.out.println(hashMap);
    
            System.out.println(hashMap.size());
    
            System.out.println(hashMap.isEmpty());
    
            System.out.println(hashMap.containsKey("no2"));
    
            hashMap.clear();
            System.out.println(hashMap);
        }
    }
    
    class Book{
        private String bookname;
        private double price;
    
        public Book(String bookname, double price) {
            this.bookname = bookname;
            this.price = price;
        }
    }
    
    output:
    {no2=LiPing, null=null, no1=Lilei, no3=com.javamap.Book@1b6d3586}
    null
    {no2=LiPing, no1=Lilei, no3=com.javamap.Book@1b6d3586}
    3
    false
    true
    {}
    

    四、Map接口遍历方式

    先来看一下遍历的时候涉及到的方法:

    1. containsKey:查找键是否存在。
    2. keySet:获取所有的键。
    3. entrySet:获取所有的关系。
    4. values:获取所有的值。
    • 一、先取出所有的Key,再通过Key以增强for循环或者迭代器的方式取出对应的Value。

    增强for循环

    package com.javamap;
    
    import java.util.HashMap;
    import java.util.Set;
    
    public class JavaMapIter {
        public static void main(String[] args) {
            HashMap hashMap = new HashMap();
    
            hashMap.put("no1", "Lilei");
            hashMap.put("no2", "LiPing");
            hashMap.put("no3", "Zhang");
            hashMap.put("no4", "Zhao");
    
            Set set = hashMap.keySet();
    
            for (Object key : set) {
                System.out.println(key + " " + hashMap.get(key));
            }
        }
    }
    
    output:
    no2 LiPing
    no1 Lilei
    no4 Zhao
    no3 Zhang
    

    迭代器:

    Iterator iterator = set.iterator();
            while (iterator.hasNext()) {
                Object next = iterator.next();
                System.out.println(next + " " + hashMap.get(next));
            }
    
    • 二、如果不需要Key,仅仅需要Value。那么直接通过values()方法将所有Value取出,然后再用Collections的所有遍历方式都可。
     Collection values = hashMap.values();
    
            //增强for循环
            for (Object value : values) {
                System.out.println(value);
            }
            //迭代器
            Iterator iterator = values.iterator();
            while (iterator.hasNext()) {
                Object next = iterator.next();
                System.out.println(next);
            }
    
    • 三、通过EntrySet来获取Key-Value。

    tips:
    在获取到entrySet之后,需要将其转成Map.Entry,因为它提供了getkey()和getvalue()方法,这样就可以获取到Key
    和Value了。

    package com.javamap;
    
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Iterator;
    
    public class JavaMapIter {
        public static void main(String[] args) {
            HashMap hashMap = new HashMap();
    
            hashMap.put("no1", "Lilei");
            hashMap.put("no2", "LiPing");
            hashMap.put("no3", "Zhang");
            hashMap.put("no4", "Zhao");
    
           package com.javamap;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    
    public class JavaMapIter {
        public static void main(String[] args) {
            HashMap hashMap = new HashMap();
    
            hashMap.put("no1", "Lilei");
            hashMap.put("no2", "LiPing");
            hashMap.put("no3", "Zhang");
            hashMap.put("no4", "Zhao");
    
            Set set = hashMap.entrySet();
            for (Object o : set) {
                Map.Entry oe = (Map.Entry) o;
                System.out.println(oe.getKey() + " " + oe.getValue());
            }
            
    
    
        }
    }
    
        }
    }
    
    output:
    no2 LiPing
    no1 Lilei
    no4 Zhao
    no3 Zhang
    
  • 相关阅读:
    互联网摸鱼日报(2022-11-11)
    数据结构——图的遍历
    沉浸式推理乐趣:体验线上剧本杀小程序的魅力
    五分钟掌握NineData:新手任务速成指南
    2023年9月18日
    OpenJudge NOI题库 1.6 编程基础之一维数组
    【AQS】概述、执行流程、体系架构、深⼊源码解读(加锁,解锁)、源码总结_JUC20
    这几款抠图工具效果很好,朋友们不要错过
    TCP/IP协议专栏——静态路由互导 详解——网络入门和工程维护必看
    C++新经典 | C++ 查漏补缺(模板与泛型)
  • 原文地址:https://blog.csdn.net/qq_37466661/article/details/126962035