• Java学习路线(14)——Map集合类


    一、介绍

    概念

    • Map集合是一种双列集合,每个元素包含两个数据。
    • 元素格式:【key=value】键值对元素
    • Map又称为 “键值对集合”

    Map集合格式: {key1=value1,key2=value2,key3=value3,…}


    二、Map集合的特点

    Map家族图
    在这里插入图片描述

    1、说明:

    • 使用最多的Map集合是HashMap。
    • 重点是HashMap、LinkedHashMap,TreeMap。

    2、体系特点:

    • 由键决定获取的值。
    • Map的键是无序、不重复、无索引的,值不做要求。
    • Map重复键相继覆盖前面的键值。
    • Map的键值对都可以为null。

    三、Map集合API

    由于Map集合是双列集合的父接口,它的功能为所有双列集合通用功能。

    常用方法API

    方法说明
    V put(K key,V value)添加元素
    V remove(Object key)根据键删除元素
    V get(Object key)根据键获取元素
    void clear()清空集合
    boolean containsKey(Object key)判断集合中是否包含指定的键
    boolean containsValue(Object value)判断集合中是否包含指定的值
    Set keySet()获取集合中所有的键
    Collection values()获取集合中所有的值
    boolean isEmpty()判断集合是否为空
    int size()获取集合长度
    Map putAll(Map M)合并集合

    四、Map的遍历方法

    1、键找值

    主要用于对象-value的键值对集合。

    (1)流程

    • 获取键列表【Map.keySet()】
    • 根据键查找值【Map.get(key)】

    (2)示例

    class Main{
        public static void main(String[] args) {
            /*查找商品名为goods3的价格是多少?*/
            Map<String,Double> map = new HashMap<>();
            map.put("goods1",30.7);
            map.put("goods2",62.5);
            map.put("goods3",20.8);
            map.put("goods4",78.5);
            for (String key : map.keySet()) {
                if (key.equals("goods3")){
                    System.out.println(map.get(key));
                    break;
                }
            }
        }
    }
    
    /*打印结果*/
    20.8
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    2、键值对

    主要用于对象-value的键值对集合。

    (1)流程

    • 获取所有键值对对象集合 【Set> entrySet()】
    • 获取键【K getKey()】
    • 获取值【V getValue()】

    (2)示例

    Map<String,Double> map = new HashMap<>();
    map.put("goods1",30.7);
    map.put("goods2",62.5);
    map.put("goods3",20.8);
    map.put("goods4",78.5);
    
    /*获取键值对对象*/
    Set<Map.Entry<String, Double>> entries = map.entrySet();
    
    /*遍历获取键与值*/
    for (Map.Entry<String, Double> entry : entries) {
    	System.out.println(entry.getKey() + "==>" + entry.getValue());
    }
    
    /*打印结果*/
    goods1==>30.7
    goods4==>78.5
    goods3==>20.8
    goods2==>62.5
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    3、lambda表达式
    (1)示例

    Map<String,Double> map = new HashMap<>();
    map.put("goods1",30.7);
    map.put("goods2",62.5);
    map.put("goods3",20.8);
    map.put("goods4",78.5);
    
    map.forEach((k,v)-> System.out.println(k + "==>" + v));
    
    /*打印结果*/
    goods1==>30.7
    goods4==>78.5
    goods3==>20.8
    goods2==>62.5
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    五、Map的三种实现类
    1、HashMap
    特点: 无序、不重复、无索引,依赖hashCode()和equals()保证的唯一。若键要存储自定义对象,需要重写hashCode()和equals()。
    底层: Hash表,每个元素包含两个数据

    2、LinkedHashMap
    特点: 有序、不重复、无索引,保证存储和取出的元素顺序一致。
    底层: Hash表,双链表机制记录存储顺序。

    3、TreeMap
    特点: 可排序、不重复、无索引,只对键数据默认升序排序或自定义排序。
    底层: 与TreeSet底层相同。
    实现排序的方式:

    • 类实现Comparable接口
    • 集合自定义Comparator比较器
  • 相关阅读:
    前端网页开发实例入门
    element el-table 设置fixed导致行错乱问题
    C++设计模式-创建型设计模式:构建者(Builder)
    给新手程序员的建议
    spring-boot 请求参数校验:注解 @Validated 的使用、手动校验、自定义校验
    LeetCode每日一题(1754. Largest Merge Of Two Strings)
    济南申报高新技术企业不符合的条件
    编写程序实现乐手弹奏乐器(多态)
    CentOS Stream 9 设置
    AK 9.12 百度Java后端研发B卷 笔试
  • 原文地址:https://blog.csdn.net/Zain_horse/article/details/130899209