【从零开始学Java | 第二十六篇】双列集合(Map)

目录

前言

一、双列集合的特点

[1. 键值对(Key-Value)存储](#1. 键值对(Key-Value)存储)

[2. 键(Key)的唯一性](#2. 键(Key)的唯一性)

[3. 值(Value)的可重复性](#3. 值(Value)的可重复性)

[4. 单向的映射关系](#4. 单向的映射关系)

[5. 顺序的差异化(根据具体实现类而定)](#5. 顺序的差异化(根据具体实现类而定))

二、双列集合Map常用的API

[put(K key, V value)](#put(K key, V value))

三、Map的遍历方式

1.键找值遍历

2.键值对遍历

3.Lambda表达式


前言

在之前学习了单列集合Collection接口,现在我们要学习的是Map双列集合,我们常说的双列集合 通常指的是基于 Map 接口实现的数据结构。与单列集合(如 ListSet,每次只存入一个独立元素)不同,双列集合每次存储的都是一对具有关联关系的数据。

一、双列集合的特点

1. 键值对(Key-Value)存储

这是双列集合最本质的特征。集合中的每一个元素实际上是一个 Entry(条目),它包含两个部分:

  • Key(键):数据的唯一标识,类似于数据库中的主键、学生的学号或字典里的单词。

  • Value(值):与键相关联的具体数据,类似于学生的具体档案或字典里单词的解释。

2. 键(Key)的唯一性

在一个双列集合中,绝对不允许存在两个完全相同的 Key

  • 如果你尝试向集合中添加一个已经存在的 Key,系统不会报错,而是会用新的 Value 覆盖掉旧的 Value

  • 举例 :如果你先存入了 <"001", "张三">,随后又存入 <"001", "李四">,那么键 "001" 对应的值就会被更新为 "李四"

3. 值(Value)的可重复性

虽然 Key 必须唯一,但不同的 Key 可以映射到完全相同的 Value

  • 举例<"001", "北京"><"002", "北京"> 可以和谐地共存于同一个集合中(两个不同工号的员工都在北京分公司)。

4. 单向的映射关系

每个 Key 最多只能映射到一个确定的 Value,你通过 Key 可以极快地查找到对应的 Value,但通常不能直接通过 Value 反向高效地查找 Key。

如果你需要一个 Key 对应多个数据,通常需要将 Value 设置为一个单列集合(例如 Map<String, List<String>>)。

5. 顺序的差异化(根据具体实现类而定)

双列集合本身不保证元素的顺序,具体是否有序取决于你使用的底层实现类:

  • 无序集合:如最常用的 HashMap,它存取元素的顺序是不一致的,但它的查找和插入效率最高。

  • 插入有序:如 LinkedHashMap,它可以保证你遍历集合时,元素会按照你当初存入的顺序输出。

  • 大小有序:如 TreeMap,它会根据 Key 的自然顺序(或者你指定的比较器)对所有的键值对进行自动排序。

二、双列集合Map常用的API

方法名 说明
V put(K key, V value) 添加元素
V remove(Object key) 根据键删除键值对元素
void clear() 移除所有键值对元素
boolean containsKey(Object key) 判断集合是否包含指定的键
boolean containsValue(Object value) 判断集合是否包含指定的值
boolean isEmpty() 判断集合是否为空
int size() 集合的长度,也就是集合中键值对的个数

put(K key, V value)

put方法的细节:添加/覆盖

  • 在添加数据的时候,如果键不存在,那么直接把键值对对象添加到map集合中,方法返回null
  • 如果键已经存在,那么会把原有的键值对对象覆盖,会把覆盖的值进行返回。
java 复制代码
public class Test {
    public static void main(String[] args) {
        Map<String, Integer> m = new HashMap<>();

        
        Integer value1 = m.put("张三", 18);
        System.out.println(value1);
        m.put("李四", 20);
        m.put("王五", 22);

        Integer value2 = m.put("王五", 25);
        System.out.println(value2);

        System.out.println(m);
    }
}

三、Map的遍历方式

Map有三种遍历方式:

  • 键找值
  • 键值对
  • Lambda表达式

1.键找值遍历

主要是通过**get(K key)**方法通过键获取对应的值。

java 复制代码
public class Test {
    public static void main(String[] args) {
        Map<String, Integer> m = new HashMap<>();


        m.put("张三", 18);
        m.put("李四", 20);
        m.put("王五", 22);
        //将map中的键,放入单列集合中
        Set<String> s = m.keySet();
        //通过单列集合中的键找值
        s.forEach(key-> {
                Integer value = m.get(key);
                System.out.println(key + "=" + value);
        });
    }
}

2.键值对遍历

核心思路是通过获取Map集合中的entry来间接获取键和值。

java 复制代码
public class Test {
    public static void main(String[] args) {
        Map<String, Integer> m = new HashMap<>();
        m.put("zhangsan", 13);
        m.put("lisi", 24);
        m.put("wangwu", 35);

        //通过键值对遍历
        Set<Map.Entry<String, Integer>> entries = m.entrySet();
        for (Map.Entry<String, Integer> entry : entries) {
            String key = entry.getKey();
            int value = entry.getValue();
            System.out.println(key + " = " + value);
        }
    }
}

3.Lambda表达式

java 复制代码
public class Test {
    public static void main(String[] args) {
        Map<String, String> m = new HashMap<>();
        m.put("2026001", "张三");
        m.put("2026002", "李四");
        m.put("2026003", "王五");

        m.forEach(new BiConsumer<String, String>() {
            @Override
            public void accept(String key, String value) {
                System.out.println(key + " = " + value);
            }
        });
    }
}

😎😎😎😎

相关推荐
Stella Blog3 小时前
狂神Java基础学习笔记Day05
java·笔记·学习
曹牧3 小时前
Spring WebService 的两种主流实现方式‌
java·后端·spring
pqq的迷弟3 小时前
面试整理:HashMap\ConcurrentHashMap原来
java·面试·职场和发展
夕除3 小时前
javaweb--16
java·状态模式
用户游民3 小时前
Android 腾讯X5WebView如何禁止系统自带剪切板和自定义剪切板视图
android·java
花月C3 小时前
Agent应用开发零基础入门:核心概念、环境配置与首次LLM调用
java·python
曹牧3 小时前
Java Web:DispatcherServlet
java·开发语言·前端
hehelm3 小时前
C++ 模拟实现 AVL 树
开发语言·c++
直奔標竿3 小时前
Java开发者AI转型第二十三课!Spring AI个人知识库实战(二):异步ETL流水线搭建与避坑指南
java·人工智能·spring boot·后端·spring
Lyyaoo.3 小时前
TreadLocal和TreadLocalMap
android·java·redis