【数据结构】Map的常用方法

文章目录

    • 一、搜索
      • 1.概念
    • 二、Map的使用
      • 1.概念:
      • 2.Map的常用方法:
            • 1.V put(K Key ,V Value )
            • 2.V get(Object key)
            • 3.V getOrDefault(Object key, V defaultValue)
            • 4.V remove(Object key)
            • 5.Set<K> keySet()
            • 6.Collection<V> values()
            • 7.Set<Map.Entry<K, V>> entrySet()
            • 8.boolean containsKey(Object key)
            • 9.boolean containsValue(Object value)
      • 3.Map的注意事项


一、搜索

1.概念

  • 1.Map和Set是一种专门用来进行搜索的容器/数据结构,搜索的效率和具体实例化的子类有关。

    分别实例化TreeMap、HashMap,两者存在效率上的差别。

            Map<String,Integer>map1 =new TreeMap<>();//查找的复杂度为o(logN)
            Map<String,Integer>map2 =new HashMap<>();//查找的复杂度为o(1)
            // TreeMap的底层是搜索树
            // HashMap的底层是哈希表:数组+链表+红黑树组成
    
  • 2.常见的搜索方法为 静态查找,一般不进行插入、删除。

    1,直接遍历: 时间复杂度为 o(N),元素越多,效率越慢。

    2.二分查找:时间复杂度为 o(log2N),要求搜索前必须是有序的。

  • 3.而Map和Set是可以进行 动态查找 的集合容器。

  • 4.只有关键字的叫纯Key模型(Set),由关键字和其对应的值形成的键值对,叫Key-Value模型(Map)

二、Map的使用

1.概念:

在这里插入图片描述

  • Map是一个接口类,没有继承于Collection。
  • 存储的形式是 Key-Value 键值对,并且Key是唯一的,不能重复。

2.Map的常用方法:

1.V put(K Key ,V Value )

设置Key对应的Value,将元素对应的值进行存储

在这里插入图片描述

  • Map的底层是一棵搜索树,在放进搜索树的时候要进行比较,比较的对象是关键字Key
    public static void main(String[] args) {
        Map<String,Integer>map1 =new TreeMap<>();//查找的复杂度为o(logN)
        map1.put("Math",3);
        map1.put("Chinese",2);
        map1.put("English",4);
        System.out.println(map1);
    }
	//{Chinese=2, English=4, Math=3}
2.V get(Object key)
  • 返回对应的value,通过Key得到对应的值
        System.out.println(map1.get("Math"));//2
        System.out.println(map1.get("Art"));//null

如果get传进的Key不存在,则返回的Value值为null

3.V getOrDefault(Object key, V defaultValue)
  • 返回 key 对应的 value,key 不存在,返回默认值

             map1.put("Math",3);
    		System.out.println(map1.getOrDefault("Science", 7));//7
             System.out.println(map1.getOrDefault("Math", 7));   //3
    

    如果给的Key值在Map中存在,返回原本的Value,忽视自己填的默认值

4.V remove(Object key)
  • 根据Key来删除K-V的映射关系
        System.out.println(map1.remove("English"));//4
        System.out.println("++++++");
        System.out.println(map1.containsValue(4));		//false
        System.out.println(map1.containsKey("English"));//false

再remove()中传入Key, key和其对应的Value均删除

remove()返回删除的Value

5.Set keySet()
  • 返回所有 key 的不重复集合 ,返回的是一个set
        Set<String>set = map1.keySet();
        System.out.println(set);//[Chinese, English, Math]
6.Collection values()
  • 返回所有 value 的可重复集合
        Collection<Integer> values = map1.values();
        System.out.println(values);//[2, 4, 3]
7.Set<Map.Entry<K, V>> entrySet()
  • 返回所有的 key-value 映射关系

  • 将map的Key和Value看作一个整体(Entry),Set中存放不同的Entry

        Set<Map.Entry<String, Integer>> entrySet = map1.entrySet();
        for (Map.Entry<String, Integer> entry : entrySet) {
            System.out.println("Key:"+entry.getKey()+" Value:"+entry.getValue());
        }

//Key:Chinese Value:2
//Key:English Value:4
//Key:Math Value:3

8.boolean containsKey(Object key)
  • 判断是否包含 key
        System.out.println(map1.containsKey("Chinese"));//true
9.boolean containsValue(Object value)
  • 判断是否包含Value
        System.out.println(map1.containsValue(3));true

3.Map的注意事项

  • 1.Map是一个接口,不能直接实例化对象。只能实例化它的实现类TreeMap和HashMap
  • 2.Map中存放键值对中的Key是唯一的,Value不唯一
        map1.put("English", 4);
        map1.put("English",44);

如果存储相同的Key,会覆盖掉之前的Value.

  • 3.在TreeMap中插入键值对时,Key不能为空,否则会抛出空指针异常,Value可以为空。HashMap的Key和Value都可以为空
  • 4.Map中的Key因为不能重复,可以全部用keySet分离出来,存进Set中。Value也可以分离出来,存在Collection的任何一个子集合中(可以重复)
  • 5.Map中的键值对,Key不能直接修改,Value可以直接修改。如皋要修改Key,需要先删除Key,再重新插入

点击移步博客主页,欢迎光临~

偷cyk的图

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

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

相关文章

连锁门店终端如何高效IT运维?向日葵助力服装行业数字化升级

服装行业作为典型的传统行业&#xff0c;因供应逐渐饱和、产能相对过剩以及消费结构升级&#xff0c;其销售端的数字化转型需求是最为迫切的。 为此&#xff0c;某知名时装品牌紧抓数字化转型机遇&#xff0c;在2016年起就开始了数字化变革&#xff0c;并在两年多的时间里完成…

配置与管理DNS服务器

配置与管理DNS服务器 **1&#xff0c;什么是DNS&#xff1f;**负责将域名转换成实际想对应的ip地址&#xff0c;这个过程交域名解析。 **2&#xff0c;域名解析的方法&#xff1a;**分布式&#xff0c;层次结构的数据库系统。根域&#xff0c;顶级域&#xff0c;二级域&#…

MyBatis是纸老虎吗?(二)

从二月二十六号开始&#xff0c;我就要求自己出一期与MyBatis有关的文章&#xff0c;直到三月三号那天才发表第一篇文章。这速度&#xff0c;这质量&#xff0c;着实堪忧。经过这件事&#xff0c;我也深刻认识到自己性格上的缺陷——懒惰。为了克服这个坏毛病&#xff0c;我决定…

使用Julia语言和R语言实现K-均值

K-均值算法基础 K-均值聚类算法属于一种无监督学习的方法&#xff0c;通过迭代的方式将数据划分为K个不重叠的子集&#xff08;簇&#xff09;&#xff0c;每个子集由其内部数据点的平均值来表示。计算方法大体如下&#xff1a; 1.初始化簇中心 选择K个数据点作为初始的簇中心…

LLM RAG系统中消除数据幻觉的几个绝招-OPENAI公司内称的“大招”

前言-什么是数据幻觉&#xff1f;它到底有什么危害呢 我们直接来举例&#xff1a; 我是金银花一区的&#xff0c;附近有什么小学&#xff1f; 此时RAG带出如下信息&#xff1a; 金银花小区一区、二区、三区附近教育资源有&#xff1a;银树大学、建设小学金银花校区、金树高…

IMX8MM -- Yocto构建遇见的错误及解决方法:

IMX8MM Yocto构建遇见的错误及解决方法&#xff1a; 1 bison-3.0.4 error2 Opencv BB_NO_NETWORK Error &#xff1a;3 Yocto构建时出现U-boot 问题4 Yocto构建时出现Linux kernel编译问题5 wayland-native6 cross-localedef-native7 wayland-protocols8 mesa 硬件&#xff1a;…

React Navite环境搭建

React Navite官网地址 React Native 中文网 使用React来编写原生应用的框架 创建React Navite项目命令&#xff08;目录必须是英文&#xff09; npx react-nativelatest init AwesomeProject 如果你是想把 React Native 集成到现有的原生项目中&#xff0c;则步骤完全不同…

多项式回归算法模拟

import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures# 生成随机数作为x变量&#xff0c;范围在-5到5之间&#xff0c;共500个样本 x np.random.uniform(-5, 5, siz…

Java开发从入门到精通(一):Java的进阶语法知识

Java大数据开发和安全开发 Java的方法1.1 方法是什么1.1.1 方法的定义1.1.2 方法如何执行?1.1.3 方法定义时注意点1.1.4 使用方法的好处是? 1.2 方法的多种形式1.2.1 无参数 无返回值1.2.2 有参数 无返回值 1.3 方法使用时的常见问题1.4 方法的设计案例1.4.1 计算1-n的和1.4.…

[C/C++]string类常用接口介绍及模拟实现string类

一&#xff1a;Cstring类的由来 在C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c;但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP的思想&#xff0c;而且底层空间需要用…

【CSS面试题】高度塌陷问题及解决

什么情况下产生 (when 父盒子没有定义高度&#xff0c;但是子元素有高度&#xff0c;希望用子盒子撑起父盒子的高度&#xff0c;但是子盒子添加了浮动属性之后&#xff0c;父盒子高度为0 <template><div class"father"><div class"son"&…

Gitlab修改仓库权限为public、Internal、Private

Public&#xff08;公开&#xff09;&#xff1a;所有人都可以访问该仓库&#xff1b; Internal&#xff08;内部&#xff09;&#xff1a;同一个GitLab群组或实例内的所有用户都可以访问该仓库&#xff1b; Private&#xff08;私人&#xff09;&#xff1a;仅包括指定成员的用…

Dynamo处理Excel——调用Microsoft.Office.Interop.Excel教程

你好&#xff0c;这里是BIM的乐趣&#xff0c;我是九哥~ 今天我们来聊聊如何通过Dynamo处理Excel数据以及格式&#xff0c;Dynamo自带的节点肯定是不行&#xff0c;所以我们需要来用Python解决&#xff08;当然有个节点包 Bumblebee&#xff0c;我在案例百解教程里有过介绍&a…

pytorch实现分割模型TransUNet

TransUNet是一个非常经典的图像分割模型。该模型出现在Transformer引入图像领域的早期&#xff0c;所以结构比较简单&#xff0c;但是实际上效果却比很多后续花哨的模型更好。所以有必要捋一遍pytorch实现TransUNet的整体流程。 首先&#xff0c;按照惯例&#xff0c;先看一下…

Text Field文本输入框

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 Text Field文本输入框 一、最基本的本文输入框1、基础示例2、一些表单属性3、验证 二、多行文本 一、最基本的本文输入框 1、基础示例 import {Box, TextField} from "…

Java开发:对象间复制属性,方法归纳

在Java开发中&#xff0c;对象间复制属性是一项常见的任务&#xff0c;特别是在处理层&#xff08;如控制器层&#xff09;与服务层或数据传输对象&#xff08;DTOs&#xff09;之间的数据转换时。有多种方法可以实现User对象到UserDTO对象的属性复制&#xff0c;下面列举了几种…

搭建Android Studio开发环境

一、JDK 1、下载 2、安装 双击进行安装&#xff0c;修改安装路径为&#xff1a;D:\Java\jdk-17.0.4.1即可&#xff0c;安装完成后目录如下&#xff1a; 配置环境变量 3、测试 WinR&#xff0c;输入cmd&#xff0c;按Enter后&#xff0c;键入&#xff1a;java --version&…

分布式执行引擎ray入门--(3)Ray Train

Ray Train中包含4个部分 Training function: 包含训练模型逻辑的函数 Worker: 用来跑训练的 Scaling configuration: 配置 Trainer: 协调以上三个部分 Ray TrainPyTorch 这一块比较建议直接去官网看diff&#xff0c;官网色块标注的比较清晰&#xff0c;非常直观。 impor…

C语言学习--练习4(二维数组)

目录 1.统计有序数组中的负数 2.矩阵对角线元素和 3.最富有客户的资产总量 4.托普利兹矩阵 5.矩阵中的幸运数 6.二进制矩阵中的特殊位置 7.岛屿的周长 1.统计有序数组中的负数 //直接遍历二维数组即可 int countNegatives(int** grid, int gridSize, int* gridColSize) …

大厂面试-好未来一面算法之求最长无重复子串长度

目录指引 大厂面试-好未来一面算法之求最长无重复子串长度本文学习目标或巩固的知识点 3. 无重复字符的最长子串&#x1f7e1;&#x1f7e2;通过题目可知题解结果验证 大厂面试-好未来一面算法之求最长无重复子串长度 本文学习目标或巩固的知识点 学习如何处理经典题目《最长…