• 集合框架的认识(四)Map


    1. Map接口的特点

    java.util.Map 查找表
    Map体现的结构是一个多行两列的表格。其中左列称为key,右列称为value
    Map总是根据key获取对应的value
    Map中的key不允许重复(equals判定)

    Map是一个接口,常用的实现类:
    java.util.HashMap:散列表,哈希表。
    散列表是当今查询速度最快的数据结构,被大量应用于缓存服务器中。

    2.Map常用方法

    public class MapDemo1 {
        public static void main(String[] args) {
            Map<String,Integer> map=new HashMap<>();
            /**
             * V put(K k,V v)
             * 向Map中存入一组键值对
             * 由于Map要求key不允许重复,如果使用重复的key则为替换value操作,此时
             * 方法返回值为被替换的value,否则返回值为null.
             */
            //如果Map的value是包装类,获取value时要用包装类,避免因为自动拆箱导致空指针!
            Integer value = map.put("语文", 99);
            System.out.println(value);
            map.put("数学",98);
            map.put("英语",97);
            map.put("物理",96);
            map.put("化学",99);
            System.out.println(map);
    
            value = map.put("语文", 80);
            System.out.println(map);
            System.out.println(value);
    
            /**
             * V get(Object key)
             * 根据key获取对应的value值
             */
            value=map.get("数学");
            System.out.println("数学:"+value);
            value=map.get("体育");
            System.out.println("体育:"+value);
            /**
             * V remove(Object key)
             * 根据key删除对应的键值对,返回值为这个key对应的value
             */
            value = map.remove("英语");
            System.out.println(map);
            System.out.println(value);
    
            int size = map.size();//获取Map中的元素个数(一组键值对算一个元素)
            System.out.println(size);
    
            boolean ck = map.containsKey("数学");
            System.out.println(ck);
            boolean cv = map.containsKey(96);
            System.out.println("包含value:"+cv);
    
            map.clear();//清空map
            System.out.println(map);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    3.Map支持三种遍历方式

    • 遍历所有的key
    • 遍历所有的键值对
    • 遍历所有的value(相对不常用)
    public class MapDemo2 {
        public static void main(String[] args) {
            Map<String,Integer> map=new HashMap<>();
            map.put("数学",98);
            map.put("英语",97);
            map.put("物理",96);
            map.put("化学",99);
            System.out.println(map);
            //遍历所有的key
            /**
             * Set keySet()
             * 将当前Map所有的key以一个Set集合形式返回。遍历该集合元素就等同于
             * 遍历当前Map中所有的key.
             */
            Set<String> keySet = map.keySet();
            for (String key:keySet){
                System.out.println("key:"+key);
            }
            /**
             * Set entrySet()
             * 将当前Map中所有的键值对以一个Set集合形式返回。
             * 每一组键值对以一个Entry实例形式表示。
             * Entry有两个常用方法:getKey()和getValue()用于获取其表示的
             * 键值对中的key和value
             */
            Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
            for (Map.Entry<String,Integer> e:entrySet){
                String key = e.getKey();
                Integer value = e.getValue();
                System.out.println(key+":"+value);
            }
            /*
                Collection values()
                当前Map中所有的value以一个集合形式返回
             */
            Collection<Integer> values = map.values();
            for (Integer value:values){
                System.out.println("values:"+value);
            }
    
            Collection<String> c=new ArrayList<>();
            c.add("one");
            c.add("two");
            c.add("three");
            c.add("four");
            //新循环遍历
            for(String s:c){
                System.out.println(s);
            }
            /*
                JDK8之后,集合和Map都提供了forEach方法,基于lambda表达式遍历
             */
            c.forEach(e-> System.out.println(e));
            //Map也支持forEach方法
            map.forEach((k,v)-> System.out.println(k+":"+v));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57

    4.Map的其他认识

    • 缓存技术常用的是HashMap,所以查询速度快(查询速度几乎和数据条数无关)
    • map集合输出的顺序不是按照put存入顺序的
    • map内部也是数组,数组里存的链表或红黑树
    • 要用对应的包装类去接收put替换之后的值,因为把null赋值给引用类型是没有问题的
    • map是集合框架的一员,但是没有继承Collection接口
    • 万变不离其宗,集合就一种遍历方法,就是迭代器,foreach内部还是新循环
    • Entry是map自己定义的内部接口

    5. Entry的两种定义方式

    //方式1
    Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
    //方式2
    import java.util.Map.Entry;
    Set<Entry<String, Integer>> entrySet = map.entrySet();
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

  • 相关阅读:
    广度优先搜索算法
    JS高级:js是单线程的原因
    【小月电子】FPGA开发板(XLOGIC_V1)系统学习教程-LESSON10
    旅游推荐系统
    VSCode+python单步调试库代码
    milvus使用python调用时连接失败 pymilvus.exceptions.MilvusException
    Flink-DataWorks第二部分:数据集成(第58天)
    Redis分布式缓存(一)| 单机安装、RDB和AOF持久化
    [ALI-签约代扣] 小程序环境下的签约代扣
    第五篇章——执行引擎
  • 原文地址:https://blog.csdn.net/longgetaotao_06/article/details/126301981