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("吕布", "貂蝉");//键不存在,返回值返回nullSystem.out.println("集合中键“孙策”存在的返回值:" + put1);    //小乔System.out.println("集合中键“吕布”不存在的返回值:" + put2);    //nullSystem.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);       //trueSystem.out.println("集合中是否存在键“老夫子”:" + containsKey2);       //falseSystem.out.println("判断集合是否包含指定的键的集合:" + map);        //{李白=王昭君, 吕布=貂蝉, 刘备=孙尚香, 孙策=大乔, 孙悟空=露娜, 周瑜=小乔}System.out.println("=========================== 判断集合是否包含指定的值  =============================");//5.判断集合是否包含指定的值boolean containsValue1 = map.containsValue("貂蝉");boolean containsValue2 = map.containsValue("赵云");System.out.println("集合中是否存在值“貂蝉”:" + containsValue1);       //trueSystem.out.println("集合中是否存在值“赵云”:" + containsValue2);       //falseSystem.out.println("判断集合是否包含指定的值的集合:" + map);           //{李白=王昭君, 吕布=貂蝉, 刘备=孙尚香, 孙策=大乔, 孙悟空=露娜, 周瑜=小乔}System.out.println("=========================== 判断集合是否为空  ============================");//6.判断集合是否为空boolean empty1 = map.isEmpty();System.out.println("判断集合是否为空:" + empty1);          //falseSystem.out.println("判断集合是否为空的集合:" + map);       //{李白=王昭君, 吕布=貂蝉, 刘备=孙尚香, 孙策=大乔, 孙悟空=露娜, 周瑜=小乔}System.out.println("========================== 集合的长度  ===========================");//7.集合的长度,也就是集合中键值对的个数int size = map.size();System.out.println("集合的长度:" + size);             //6System.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.rhkb.cn/news/253364.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Vue】组件间通信的7种方法(全)

目录 组件之前的通信方法 1. props/$emit 2.parent/children 3.ref 4.v-model 5.sync 6.attrs,attrs,attrs,listeners 7.provide/inject 7.eventBus 组件之前的通信方法 1. props/$emit 父传子 props 这个只能够接收父组件传来的数据 不能进行修改 可以静态传递 也可…

回归预测 | Matlab实现RIME-CNN-LSTM-Attention霜冰优化卷积长短期记忆网络注意力多变量回归预测(SE注意力机制)

回归预测 | Matlab实现RIME-CNN-LSTM-Attention霜冰优化卷积长短期记忆网络注意力多变量回归预测&#xff08;SE注意力机制&#xff09; 目录 回归预测 | Matlab实现RIME-CNN-LSTM-Attention霜冰优化卷积长短期记忆网络注意力多变量回归预测&#xff08;SE注意力机制&#xff0…

elementui常用组件-个人版(间断更新)

Dialog 对话框 el-dialog <el-dialogtitle"提示":visible.sync"dialogVisible"width"30%":before-close"handleClose"><span>这是一段信息</span><span slot"footer" class"dialog-footer"…

python-分享篇-屏保计时器

文章目录 代码效果 代码 import turtle, time def drawGap():turtle.penup()turtle.fd(5) def drawLine(draw):drawGap()turtle.pendown() if draw else turtle.penup()turtle.fd(40)drawGap()turtle.right(90) def drawDigit(d):drawLine(True) if d in [2,3,4,5,6,8,9] else…

COMSOL接触(高度非线性)仿真常见报错及解决方法总结

前言 由于COMSOL采用隐式求解器&#xff0c;相较于使用显式求解器的Dyna、Abaqus等软件。要在COMSOL中实现结构接触这一高度非线性问题难度较大&#xff0c;报错时有发生。究其原因&#xff0c;是当物体之间相互接触时&#xff0c;物体受到的应力、运动路径会发生突变&#xff…

查看NodeJs版本和查看NPM版本

Windows10 Dos命令下 查看NodeJs版本和查看NPM版本 NodeJs的命令是&#xff1a;node -v Npm的命令是&#xff1a;npm -v 下图&#xff1a; 记录下&#xff01;~

java hutool工具类实现将数据下载到excel

通过hutool工具类&#xff0c;对于excel的操作变得非常简单&#xff0c;上篇介绍的是excel的上传&#xff0c;对excel的操作&#xff0c;核心代码只有一行。本篇的excel的下载&#xff0c;核心数据也不超过两行&#xff0c;简洁方便&#xff0c;特别适合当下的低代码操作。 下载…

RabbitMQ的延迟队列实现[死信队列](笔记一)

关于死信队列的使用场景不再强调&#xff0c;只针对服务端配置 注意&#xff1a; 本文只针对实现死信队列的rabbitMQ基本配置步骤进行阐述和实现 目录 1、docker-compose 安装rabbitMq2、查看对应的版本及插件下载3、安装插件和检测 1、docker-compose 安装rabbitMq a、使用d…

Leetcode—61. 旋转链表【中等】

2024每日刷题&#xff08;114&#xff09; Leetcode—61. 旋转链表 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) …

[C++]类和对象(下)

一:再谈构造函数 1.1 构造函数体赋值 在创建对象时&#xff0c;编译器通过调用构造函数&#xff0c;给对象中各个成员变量一个合适的初始值,虽然构造函数调用之后&#xff0c;对象中已经有了一个初始值&#xff0c;但是不能将其称为对对象中成员变量的初始化 构造函数体中的语…

AI监控+智能充电桩系统如何缓解新能源汽车充电难问题

在新能源汽车行业的快速发展中&#xff0c;充电桩作为重要的配套设施&#xff0c;其建设和发展至关重要。随着新能源汽车销量的增长&#xff0c;补能需求也日益迫切&#xff0c;这为充电桩行业的发展提供了巨大的机遇。然而&#xff0c;充电桩行业在快速发展的同时&#xff0c;…

私人银行市场调研:投资资产总规模将突破90万亿元

私人银行目标客户是具有富裕的资产或很高收入的私人顾客"私人银行的门槛很高&#xff0c;其服务对象不是一般大众客户&#xff0c;而是社会上的富裕人士&#xff0c;或称为高净资产客户(HNw-HighNetworth)。私人银行客户的金融资产一般在100万美元以上&#xff0c;远远高于…

Java设计模式-责任链模式

责任链模式 一、概述二、结构三、案例实现四、优缺点五、源码解析 一、概述 在现实生活中&#xff0c;常常会出现这样的事例&#xff1a;一个请求有多个对象可以处理&#xff0c;但每个对象的处理条件或权限不同。例如&#xff0c;公司员工请假&#xff0c;可批假的领导有部门…

Vue中对虚拟DOM的理解

作为现代前端开发中的主流框架之一&#xff0c;Vue.js是一个非常流行的JavaScript框架&#xff0c;其核心概念之一就是虚拟DOM&#xff08;Virtual DOM&#xff09;。在本篇文章中&#xff0c;我们将深入探讨Vue中虚拟DOM的概念&#xff0c;并讨论为什么它在前端开发中如此重要…

git 合并多条提交记录

我要合并多条提交记录&#xff08;合并前7条为一条&#xff09;&#xff0c;实现如下效果&#xff1a; 使用git rebase // 查看前10个commit git log -10 // 将7个commit压缩成一个commit&#xff1b;注意&#xff1a;vim编辑器 git rebase -i HEAD~4 // add已经跟踪的文件 g…

Qt 常见容器类用法(二)

目录 QList类 QLinkedList类 QList类 对于不同的数据类型&#xff0c;QList<T>采取不同的存储策略&#xff0c;存储策略如下&#xff1a; 如果T是一个指针类型或指针大小的基本数据类型(该基本类型占有的字节数和指针类型占有的字节数相同)&#xff0c;QList<T>…

pytorch基本数据类型

目录 1. tensor2. 数据类型3. 数据类型的创建和使用3.1 数据类型check3.2 Dimension为0的tensor3.2 Dimension为1的tensor3.3 Dimension为2的tensor3.4 Dimension为3的tensor3.5 Dimension为4的tensor 1. tensor 下图为python数据类型与pytorch的对应关系 在pytorch中是没有s…

STM32 硬件随机数发生器(RNG)

STM32 硬件随机数发生器 文章目录 STM32 硬件随机数发生器前言第1章 随机数发生器简介1.1 RNG主要特性1.2.RNG应用 第2章 RNG原理框图第3章 RNG相关寄存器3.1 RNG 控制寄存器 (RNG_CR)3.2 RNG 状态寄存器 (RNG_SR)3.3 RNG 数据寄存器 (RNG_DR) 第3章 RNG代码部分第4章 STM32F1 …

前端vite+vue3——自动化配置路由布局

文章目录 ⭐前言&#x1f496;vue3系列文章 ⭐ 自动化配置路由&#x1f496;引入vite版本自定义目录映射&#x1f496;自动化读取文件下的路由&#x1f496;main入口加载路由&#x1f496;入口app.vue配置&#x1f496;layout基础布局配置&#x1f496;效果 ⭐总结⭐结束 ⭐前言…

Stable Diffusion 模型下载:Samaritan 3d Cartoon SDXL(撒玛利亚人 3d 卡通 SDXL)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 由“PromptSharingSamaritan”创作的撒玛利亚人 3d 卡通类型的大模型&#xff0c;该模型的基础模型为 SDXL 1.0。 条目内容类型大模型基础模型SDXL 1.0来源CIVITA…