Map 集合

Map集合

    • 1. 概述
    • 2. 方法
    • 3. 代码示例
    • 4. 输出结果
    • 5. 注意事项

实现类:

  • HashTable、HashMap、TreeMap、Properties、LinkedHashMap

其他集合类

具体信息请查看 API 帮助文档

1. 概述

Map是Java中的一种数据结构,用于存储键值对(key-value pair)。它是一个接口,实现了将键映射到值的功能。Map接口是一个泛型接口,可以指定键和值的类型。

Map集合的特点

  1. 键的唯一性:Map中的键是唯一的,每个键最多只能映射到一个值。如果尝试使用相同的键添加新的值,将会替换之前的值。

  2. 无序性:一般情况下,Map的实现类(如HashMap,LinkedHashMap)不保证键值对的顺序。如果需要按特定顺序进行遍历,可以选择使用TreeMap等有序实现类。

  3. 可以包含null键和null值:Map接口允许使用null作为键和值。但是需要注意,在使用含有null键的Map时,对键的查找和比较可能会出现NullPointerException异常。

  4. 查找效率高:根据键的哈希值可以快速查找到对应的值,因此查找的效率很高。对于HashMap等实现类,查找时间复杂度一般为O(1)。

  5. 动态调整大小:Map接口的实现类可以根据需要动态调整容量,默认情况下,它们会自动进行扩容和收缩。

Map集合是一个接口,不能直接创建对象,而是要创建实现类对象

2. 方法

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

注意事项:

  1. V put(K key,V value) :添加元素

    • put方法的细节:添加/覆盖
      • 在添加元素的时候,如果键不存在,那么直接添加键值对对象到map集合中,返回值返回null;

      • 在添加元素的时候,如果键存在,那么会把原有的键值对对象覆盖,返回被覆盖的键值对对象的值

  2. V remove(Object key) :根据键删除键值对元素

    • remove方法的细节:返回值返回的是被删除的键值对对象的值

3. 代码示例

package text.text02;

import java.util.HashMap;
import java.util.Map;

/*
Map集合:(Map集合是一个接口,不能直接创建对象,而是要创建实现类对象)

1.Map集合概述
  interface Map<K,V>  K:键的类型;V:值的类型
2.Map集合的特点
  - 双列集合,一个键对应一个值
  - 键不可以重复,值可以重复
3.方法介绍:
  | 方法名                              | 说明                                 |
  | ----------------------------------- | ------------------------------------ |
  | V   put(K key,V   value)            | 添加元素                             |
  | V   remove(Object key)              | 根据键删除键值对元素                 |
  | void   clear()                      | 移除所有的键值对元素                 |
  | boolean containsKey(Object key)     | 判断集合是否包含指定的键             |
  | boolean containsValue(Object value) | 判断集合是否包含指定的值             |
  | boolean isEmpty()                   | 判断集合是否为空                     |
  | int size()                          | 集合的长度,也就是集合中键值对的个数 |
注意事项:
    1.V   put(K key,V   value) :添加元素
    put方法的细节:添加/覆盖
       在添加元素的时候,如果键不存在,那么直接添加键值对对象到map集合中,返回值返回null;
       在添加元素的时候,如果键存在,那么会把原有的键值对对象覆盖,返回被覆盖的键值对对象的值

    2. V   remove(Object key) :根据键删除键值对元素
     remove方法的细节:返回值返回的是被删除的键值对对象的值
 */
public class text45 {
    public static void main(String[] args) {
        //创建集合对象(Map集合是一个接口,不能直接创建对象,而是要创建实现类对象)
        Map<String, String> map = new HashMap<>();


        System.out.println("========================== 添加元素  ==========================");
        //1.添加元素
        map.put("刘备", "孙尚香");
        map.put("李白", "王昭君");
        map.put("孙策", "小乔");
        map.put("周瑜", "小乔");
        map.put("孙悟空", "露娜");
        map.put("亚瑟", "安琪拉");
        System.out.println("添加元素的集合:" + map);  //{李白=王昭君, 刘备=孙尚香, 孙策=小乔, 孙悟空=露娜, 亚瑟=安琪拉, 周瑜=小乔}

        //put方法的细节:添加/覆盖
        //在添加元素的时候,如果键不存在,那么直接添加键值对对象到map集合中,返回值返回null;
        //在添加元素的时候,如果键存在,那么会把原有的键值对对象覆盖,返回被覆盖的键值对对象的值
        String put1 = map.put("孙策", "大乔");//键存在,原来的值“小乔”被“大乔”覆盖,返回值返回被覆盖的键值对对象的值“小乔”
        String put2 = map.put("吕布", "貂蝉");//键不存在,返回值返回null
        System.out.println("集合中键“孙策”存在的返回值:" + put1);    //小乔
        System.out.println("集合中键“吕布”不存在的返回值:" + put2);    //null
        System.out.println("删除元素的集合:" + map);  //{李白=王昭君, 吕布=貂蝉, 刘备=孙尚香, 孙策=大乔, 孙悟空=露娜, 亚瑟=安琪拉, 周瑜=小乔}


        System.out.println("========================= 根据键删除键值对元素  =========================");
        //2.根据键删除键值对元素
        //细节:返回值返回的是被删除的键值对对象的值
        String removeResult = map.remove("亚瑟");
        System.out.println("根据键“亚瑟“删除键值对元素的返回值:" + removeResult);    //安琪拉
        System.out.println("根据键删除键值对元素的集合:" + map);    //{李白=王昭君, 吕布=貂蝉, 刘备=孙尚香, 孙策=大乔, 孙悟空=露娜, 周瑜=小乔}


        System.out.println("=========================== 移除所有的键值对元素 ============================");
        //3.移除所有的键值对元素
        //map.clear();
        System.out.println("移除所有的键值对元素的集合:" + map);     //{}


        System.out.println("========================== 判断集合是否包含指定的键  ============================");
        //4.判断集合是否包含指定的键
        boolean containsKey1 = map.containsKey("孙策");
        boolean containsKey2 = map.containsKey("老夫子");
        System.out.println("集合中是否存在键“孙策”:" + containsKey1);       //true
        System.out.println("集合中是否存在键“老夫子”:" + containsKey2);       //false
        System.out.println("判断集合是否包含指定的键的集合:" + map);        //{李白=王昭君, 吕布=貂蝉, 刘备=孙尚香, 孙策=大乔, 孙悟空=露娜, 周瑜=小乔}


        System.out.println("=========================== 判断集合是否包含指定的值  =============================");
        //5.判断集合是否包含指定的值
        boolean containsValue1 = map.containsValue("貂蝉");
        boolean containsValue2 = map.containsValue("赵云");
        System.out.println("集合中是否存在值“貂蝉”:" + containsValue1);       //true
        System.out.println("集合中是否存在值“赵云”:" + containsValue2);       //false
        System.out.println("判断集合是否包含指定的值的集合:" + map);           //{李白=王昭君, 吕布=貂蝉, 刘备=孙尚香, 孙策=大乔, 孙悟空=露娜, 周瑜=小乔}


        System.out.println("=========================== 判断集合是否为空  ============================");
        //6.判断集合是否为空
        boolean empty1 = map.isEmpty();
        System.out.println("判断集合是否为空:" + empty1);          //false
        System.out.println("判断集合是否为空的集合:" + map);       //{李白=王昭君, 吕布=貂蝉, 刘备=孙尚香, 孙策=大乔, 孙悟空=露娜, 周瑜=小乔}


        System.out.println("========================== 集合的长度  ===========================");
        //7.集合的长度,也就是集合中键值对的个数
        int size = map.size();
        System.out.println("集合的长度:" + size);             //6
        System.out.println("判断集合的长度的集合:" + map);      //{李白=王昭君, 吕布=貂蝉, 刘备=孙尚香, 孙策=大乔, 孙悟空=露娜, 周瑜=小乔}
    }
}

4. 输出结果

  1. 添加元素
    在这里插入图片描述
  2. 根据键删除键值对元素
    在这里插入图片描述
  3. 移除所有的键值对元素
    在这里插入图片描述
  4. 判断集合是否包含指定的键
    在这里插入图片描述
  5. 判断集合是否包含指定的值
    在这里插入图片描述
  6. 判断集合是否为空
    在这里插入图片描述
  7. 集合的长度
    在这里插入图片描述

5. 注意事项

  1. 键的唯一性:Map中的键是唯一的,当插入一个已存在的键时,新的值会覆盖旧的值。因此,在使用Map时需要保证键的唯一性,否则可能导致数据被覆盖或混乱。

  2. 重写hashCode和equals方法:如果自定义类型作为键或值,需要重写该类型的hashCode和equals方法。这是因为Map在查找和比较键时,基于hashCode和equals进行操作。如果没有正确重写这两个方法,可能导致无法正确找到或比较键。

  3. 并发访问:大多数Map实现类(如HashMap)不是线程安全的。如果在多线程环境下使用Map,需要进行合适的同步处理(如使用ConcurrentHashMap),或者使用线程安全的Map实现类(如Hashtable)。

  4. 性能考虑:不同的Map实现类在性能方面可能存在差异,例如HashMap的查询和插入速度比较快,但迭代顺序不确定;而TreeMap则提供了按照键排序的功能,但性能可能略低。因此,在选择Map实现类时,需要根据具体需求和场景综合考虑性能因素。

  5. 使用合适的泛型:Map接口是一个泛型接口,在使用时应指定键和值的具体类型,并进行类型安全的操作。这可以避免运行时的类型异常,并增加代码的可读性和可维护性。

  6. 适当使用null键和null值:Map允许使用null作为键或值,但需要注意空指针异常。在使用含有null键的Map时,需要特别小心对键进行查找和比较的操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/378354.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学生速看:免费领取一台阿里云学生服务器2024申请入口

2024年阿里云学生服务器免费领取&#xff0c;先完成学生认证即可免费领取一台云服务器ECS&#xff0c;配置为2核2G、1M带宽、40G系统盘&#xff0c;在云服务器ECS实例过期之前&#xff0c;完成实验与认证任务&#xff0c;还可以免费续费6个月&#xff0c;阿里云百科aliyunbaike…

【知识整理】管理即服务,识人、识己

1. 背景 一个人的力量是有限的&#xff0c;如何规模化生产&#xff0c;人员的规模化组织&#xff0c;如何提升合作的规模和效率。 管理的本质&#xff1a; 1、服务他人&#xff1f; 2、激发主动性&#xff1f; 3、氛围宽松&#xff1f; 上面是理念&#xff0c; 1、那如何…

MacOS上怎么把格式化成APFS的U盘或者硬盘格式化回ExFAT?

一、问题 MacOS在更新MacOS Monterey后或者更高系统后发现&#xff0c;格式U盘或者硬盘只有4个APFS选项&#xff0c;那么我们该如何将APFS格式成ExFAT&#xff1f; 二、解答 将APFS的U盘或者硬盘拓展成MacOS的拓展格式即可&#xff0c;操作步骤如下 1、电脑接入U盘或者硬盘 2…

vue 实现 手机号中间4位分格输入框(暂无选中标识

vue 实现 手机号中间4位分格输入框 效果图 <!--4位分格输入框--> <!--<template><div><div style"display: flex;"><div class"phone-input"><inputv-for"(digit, index) in digits":key"index"…

【递归】【前序中序后序遍历】【递归调用栈空间与二叉树深度有关】【斐波那契数】Leetcode 94 144 145

【递归】【前序中序后序遍历】【递归调用栈空间与二叉树深度有关】Leetcode 94 144 145 1.前序遍历&#xff08;递归&#xff09; preorder2.中序遍历&#xff08;递归&#xff09;inorder3.后序遍历&#xff08;递归&#xff09;postorder4. 斐波那契数 ---------------&…

洞察 Electric Capital 2023 年开发者报告,找准未来 Web3 开发趋势

作者&#xff1a;Electric Capital 编译&#xff1a;TinTinLand 原文链接&#xff1a;https://www.developerreport.com/developer-report 近期&#xff0c;Electric Capital 发布了 2023 年年度加密开发者报告&#xff0c;对 818k 开源存储库中的 4.85 亿次代码提交进行分析…

【C语言】通过socket看系统调用过程

一、通过socket看系统调用过程 在Linux操作系统中&#xff0c;系统调用是用户空间与内核空间之间交互的一种方式。当一个应用程序需要执行操作系统级别的任务时&#xff0c;比如创建一个网络套接字&#xff08;socket&#xff09;&#xff0c;它必须通过系统调用请求内核来执行…

JavaSE——数组(1/2)-数组的定义和访问(静态初始化数组、动态初始化数组、案例练习)

目录 数组的定义和访问 静态初始化数组 数组的访问 数组的遍历 案例练习 动态初始化数组 案例练习 数组是什么 数组就是一个容器&#xff0c;用来存储一批同种类型的数据。 例子&#xff1a; 20&#xff0c;10&#xff0c;80&#xff0c;60&#xff0c;90 int[ ] arr …

STM32/C51开发环境搭建(KeilV5安装)

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统&#xff0c;与汇编相比&#xff0c;C语言在功能上、结构性、可读性、可维护性上有明显的优势&#xff0c;因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等…

第59讲订单数据下拉实现

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;/*** 订单查询 type值 0 全部订单 1待付款 2 待收货 3 退款/退货* param type* return*/RequestMapping("/list")public R list(Integer type,Integer page,Integer pageSize){System.out.pri…

【C++基础入门】七、指针(定义和使用、所占内存空间、空指针和野指针、const关键字修饰指针、指针和数组、指针和函数)

七、指针 7.1 指针的基本概念 指针的作用&#xff1a; 可以通过指针间接访问内存 内存编号是从0开始记录的&#xff0c;一般用十六进制数字表示可以利用指针变量保存地址 7.2 指针变量的定义和使用 指针变量定义语法&#xff1a; 数据类型 * 变量名&#xff1b; 示例&…

统一身份认证系统架构设计与实践总结

随着互联网的快速发展和应用的普及&#xff0c;人们在各个网站和应用上需要不同的账号和密码进行身份认证。为了解决这个问题&#xff0c;统一身份认证系统应运而生。本文将总结统一身份认证系统的架构设计与实践经验&#xff0c;帮助读者了解如何设计和实现一个高效、安全的统…

一、OpenAI API介绍

Open AI API可以应用到任何的业务场景。 文本生成 创造助理 嵌入数据 语音转化 图片生成 图片输入 1. 核心概念 1.1 Text generation models OpenAI 的文本生成模型(通常被称为generative pre-trained transformers 模型简称&#xff1a;GPT),有GPT-4和G…

《学成在线》微服务实战项目实操笔记系列(P1~P83)【上】

史上最详细《学成在线》项目实操笔记系列【上】&#xff0c;跟视频的每一P对应&#xff0c;全系列12万字&#xff0c;涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳&#xff0c;参考这篇&#xff0c;相信会带给你极大启发。 一、前期准备 1.1 项目介绍 P2 To C面向…

Eclipse 安装使用ABAPGit

Eclipse->Help->Install New software 添加地址 https://eclipse.abapgit.org/updatesite/ 安装完成打开 选择abapGit repositories,先添加仓库 点下图添加自己仓库 如图添加仓库地址 添加完仓库后&#xff0c;点击我的仓库 右键选中行&#xff0c;可以进行push和pu…

代码随想录算法训练营第42天 | 01背包理论基础 416.分割等和子集

01背包理论基础 问题定义&#xff1a;有n件物品和一个能装重量为w的背包&#xff0c;第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i]。每件物品只能用一次&#xff0c;求解将哪些物品装入背包获得的总价值最大。dp数组含义&#xff1a;dp[i][j] 表示从下标为 [0…

springboot基础案例(二)

文章目录 前言一.需求分析: 分析这个项目含有哪些功能模块二.库表设计(概要设计): 1.分析系统有哪些表 2.分析表与表关系 3.确定表中字段(显性字段 隐性字段(业务字段))2.1 创建一个库: ems-thymeleaf2.2 创建 2张表三.编码(环境搭建)1.创建一个springboot项目 项目名字: ems-t…

Ubuntu环境下安装部署Nginx(有网)

本文档适用于在Ubuntu20.04系统下部署nginx 一、使用apt-get命令安装nginx 注&#xff1a;以下命令都是在root用户下使用 1. 检查是否存在apt命令 apt –version 说明&#xff1a;出现版本号就说明当前环境存在apt 2. 更新apt命令 apt update 3. 安装nginx apt-get in…

【保姆级教程|YOLOv8改进】【7】多尺度空洞注意力(MSDA),DilateFormer实现暴力涨点

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

Minecraft 上 An Existing Connection Was Forcibly Closed by the Remote Host 错误

本篇文章介绍了使用 Minecraft 时出现远程主机错误强制关闭现有连接的原因和解决方案。 Minecraft 上 Java.IO.IOException: An Existing Connection Was Forcibly Closed by the Remote Host 原因 Minecraft 是一款使用 Java 开发的流行游戏。 由于其流行&#xff0c;服务器…
最新文章