当前位置: 首页 > news >正文

Map映射学习

一、Map的遍历

  • 创建Map集合
    Map<String, Integer> map = new HashMap<>();
  • 添加元素
    • map.put("java", 99);
    • map.put("c", 88);
    • map.put("c++", 93);
    • map.put("python", 96);
    • map.put("Go", 88);
  • 遍历方法:
    • map.keySet();
    • map.entrySet();

遍历方式1

//获取所有的key
Set<String> keys = map.keySet();
for (String key : keys){//根据key获取对应的valueInteger value = map.get(key);System.out.println(value);
}

遍历方式2

//获取所有的键值对
Set<Map.Entry<String, Integer>> entries = map.entrySet();for (Map.Entry<String, Integer> entry : entries) {String key = entry.getKey();Integer value = entry.getValue();
}

二、实现类

在这里插入图片描述

1 HashMap实现类

特点:元素唯一(key唯一),无序,key和value都可以为null
底层结构:哈希表
效率:综合效率较高

添加元素时如果和原先的key值相等,会覆盖原有的value值。判断key值唯一的依据和hashSet一致,也是先比较hashCode, 然后再比较eqauls。

2 Hashtable实现类

Hashtable是线程安全的,相对来说,效率更低。key和value不能为null。HashMap是线程不安全的,效率相对较高,key和value可以为null。

3 LinkedHashMap实现类

特点:key唯一, 有序
底层结构:哈希表 + 链表(用于记录元素迭代顺序)
效率:略低于HashMap

4 TreeMap实现类

特点:key唯一,无序,但实现了排序比大小
底层结构:红黑树
效率:查询效率接近二分查找

5 Properties实现类

Properties是Hashtable的子类,key和value都是String字符串。
特有方法:

  • getProperty(String key)
  • setPropertiy(String key, String value)

6 Set和Map的关系

HashSet底层是HashMap
LinkedHashMap底层是LinkedHashMap
TreeSet底层是TreeMap

三、底层结构和源码分析

哈希表 = 数组 + 链表 + 红黑树,将数组、链表和二叉搜索数的优点结合在一起,在增删查改时效率均高于单独的数组、链表和二叉树结构。

底层数据结构
数据插入时会哈希分布到数组的各个位置,只有当某个位置的链表元素个数大于某个值时才会转换成红黑树。当红黑树的深度到达一定数量时,底层数组的大小也会进行扩容。

1 存储元素时的位置的计算过程

  • 先计算key的hashCode值
    • 让不同的可以对应的value尽量均匀分布,
    • 但不同的哈希值进行取模运算时,高位没有参与到运算
  • 二次哈希:hash值的高低16位进行异或运算
    • 进行异或运算可以将高位的值 参与到后面的取模运算
  • hash容量取模运算:获取到元素的在数组中的索引位置

2 临界值

红黑树:当链表长度达到8时,并且容量达到64,转换为红黑树。当红黑树节点数量小于6时,退化为链表。

数组:当元素个数达到扩容阈值(= 容量*加载因子)时,进行扩容。默认初始容量为DEFAULT_INITIAL_CAPACITY = 16。

加载因子默认为0.75,当到达阈值时,需要将所有元素复制到新数组中,并重新计算哈希值。因此初始容量的大小的要最好大于元素个数和负载因子的乘积。

相关文章:

Map映射学习

一、Map的遍历 创建Map集合 Map<String, Integer> map new HashMap<>();添加元素 map.put("java", 99);map.put("c", 88);map.put("c", 93);map.put("python", 96);map.put("Go", 88); 遍历方法&#xff1a; …...

【每日一题Day292】LC1572矩阵对角线元素的和 模拟

矩阵对角线元素的和【LC1572】](https://leetcode.cn/problems/matrix-diagonal-sum/) 思路 简单模拟&#xff0c;主对角线的元素横纵坐标相等&#xff0c;副对角线的元素横纵坐标相加为n-1&#xff0c;注意避免重复计算 实现 class Solution {public int diagonalSum(int[][]…...

Mongodb:业务应用(2)

需求&#xff1a; 1、获取保存到mongodb库中的搜索记录列表 2、实现删除搜索记录接口 保存搜索记录数据参考上篇Mongodb&#xff1a;业务应用&#xff08;1&#xff09;_Success___的博客-CSDN博客 获取记录列表 1、创建controller package com.heima.search.controller.v1;…...

DSO学习笔记

最近在学习DSO系列的代码&#xff0c;整理记录一下 DOS代码流程 TODO DSO跑kitti数据集 参考高翔大佬的LDSO中LDSO/examples/run_dso_kitti.cc&#xff0c;由于kitti数据集木有光度参数标定文件&#xff0c;其实最重要的就是相机内参文件camera.txt按照格式来就行了&#xff…...

【Windows 常用工具系列 5 -- 如何在网页(CSDN)中实现右上角及右下角数字显示】

文章目录 网页右上角/右下角标号写法 网页右上角/右下角标号写法 在网页撰写文章时经常遇到需要平方的写法&#xff0c;比如书写 X 的 2次方, 可以通过下面方法完成&#xff1a; <sup>x</sup> : x 上移到右上角;<sub>x</sub> : x 下移到右下角。 实…...

sql注入--报错注入

常用的简单测试语句和注释符号说明 sql语句的注释符号&#xff0c;是sq注入语句的关键点&#xff1a;常用 # 和 -- 1、# 和 --&#xff08;有个空格&#xff09;表示注释&#xff0c;可以使它们后面的语句不被执行。在url中&#xff0c;如果是get请求也就是我们在浏览器地址栏…...

Nginx常用功能

Nginx 介绍 Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器&#xff0c;而且支持热部署&#xff0c;几乎可以做到 7 * 24 小时不间断运行&#xff0c;即使运行几个月也不需要重新启动&#xff0c;还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx 最重要的…...

【Express.js】express-validator

express-validator express.js 集成 express-validator进行数据校验 在最初的时候&#xff0c;对于请求的数据校验&#xff0c;我们是自定义一个中间件&#xff0c;然后在里面通过最原生的方式检验。在本节&#xff0c;我们将尝试用一种更优雅的方式进行数据校验。 准备工作…...

沁恒ch32V208处理器开发(三)GPIO控制

目录 GPIO功能概述 CH32V2x 微控制器的GPIO 口可以配置成多种输入或输出模式&#xff0c;内置可关闭的上拉或下拉电阻&#xff0c;可以配置成推挽或开漏功能。GPIO 口还可以复用成其他功能。端口的每个引脚都可以配置成以下的多种模式之一&#xff1a; 1 浮空输入 2 上拉输入…...

Jenkins 中 shell 脚本执行失败却不自行退出

Jenkins 中 执行 shell 脚本时&#xff0c;有时候 shell 执行失败了&#xff0c;或者判断结果是错误的&#xff0c;但是 Jenkins 执行完成后确提示成功 success 。 此时&#xff0c;可以通过条件判断来解决这个问题&#xff0c;让 Jenkins 强制退出并提示执行失败 failed 。 …...

2021年12月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题:输出整数部分 输入一个双精度浮点数f, 输出其整数部分。 时间限制:1000 内存限制:65536 输入 一个双精度浮点数f(0 < f < 100000000)。 输出 一个整数,表示浮点数的整数部分。 样例输入 3.8889 样例输出 3 下面是一个使用C语言编写的输出双精度浮点数整数部分…...

计算机网络 网络层 IPv4数据报

...

有哪些可以用于性能测试方法?【举例说明】

1.负载测试 在这里&#xff0c;负载测试指的是最常见的验证一般性能需求而进行的性能测试&#xff0c;在上面我们提到了用户最常见的性能需求就是“既要马儿跑&#xff0c;又要马儿少吃草”。因此负载测试主要是考察软件系统在既定负载下的性能表 现。我们对负载测试可以有如下…...

Linux进程管理命令

一、进程 程序由一条条指令构成&#xff0c;在运行一个程序的时候就是把这些指令从第一条执行到最后一条&#xff0c;而进程是一个正在运行的程序。 比如说&#xff0c;一个main.c文件是不可以直接运行的&#xff0c;对main.c进行编译链接之后生成一个main.exe&#xff08;在W…...

pytest 常用命令参数

-x 用例一旦失败或错误时就立即停止执行 共两条用例&#xff0c;运行第一条报错失败或报错&#xff0c;第二条就不会执行 pytest -vs -x test_pytest_study.py::TestCommon1 共2条用例&#xff0c;当执行到第一条失败时候&#xff0c;第二条不执行 --maxfailnum …...

从安装 Seata 开始的分布式事务之旅 springboot集成seata

从安装 Seata 开始的分布式事务之旅 介绍什么是 Seata&#xff1f; 安装 Seata Server下载 Seata Server 发行版配置Seata解压文件配置Seata的yml文件把配置文件config.txt加载到nacos上修改config.txt文件加载到nacos上 启动Seata服务正常启动查看启动日志打开控制台页面 启动…...

Laravel 使用mix引入本地样式文件 报错 Unable to locate Mix处理

刚下了一个bootstrap样式文件&#xff0c;mix引入了一下&#xff0c;直接报错&#xff1a; Unable to locate Mix file: /css/bootstrap.min.css. (View: D:\phpEnv\www\abc\resources\views\admin\noteAdd.blade.php)原来是需要 npm run dev 启动一下 ✔ Compiled Successfu…...

QT学习笔记-QT安装oracle oci驱动

QT学习笔记-QT安装oracle oci驱动 0、背景1、环境以及条件说明2、编译驱动2.1 下载oracle instant client2.2 编译qt oci驱动2.2.1 修改oci.pro2.2.2 MinGW64构建套件编译2.2.3 MSVC2019_64构建套件编译 3、访问数据库运行成功 0、背景 在使用QT开发应用的过程中&#xff0c;往…...

【React学习】—类的基本知识(五)

【React学习】—类的基本知识&#xff08;五&#xff09; <script>// 创建一个Person类class Person{//构造器方法constructor(name,age){this.namename;this.ageage;}//一般方法speak(){//speak方法一般放在哪里&#xff1f;类的原型上&#xff0c;供实例使用//通过Pers…...

【AI】《动手学-深度学习-PyTorch版》笔记(十六):自定义网络层、保存/加载参数、使用GPU

AI学习目录汇总 1、自定义网络层 自定义网络层很简单,三步即可完成 继承类:nn.Module定义初始化函数:__init__中定义需要初始化的代码定义向前传播函数:forward1.1 不带参数的网络层 1)定义网络层 import torch import torch.nn.functional as F from torch import nn…...

新手必看!Xinference-v1.17.1 Docker部署常见错误排查

新手必看&#xff01;Xinference-v1.17.1 Docker部署常见错误排查 1. 部署前的准备工作 1.1 系统环境检查 在开始部署Xinference之前&#xff0c;确保你的系统满足以下基本要求&#xff1a; Docker版本&#xff1a;Docker 20.10.0或更高版本NVIDIA驱动&#xff08;GPU版本需…...

MCU OTA升级超时、卡98%?手把手教你用涂鸦协议和环形队列搞定稳定传输

MCU OTA升级超时与卡顿问题深度解决方案 问题背景与核心挑战 在物联网设备远程升级过程中&#xff0c;MCU OTA升级的稳定性一直是开发者面临的主要痛点。特别是在WiFi模组与MCU之间基于串口通信的场景下&#xff0c;传输超时、进度卡顿、数据包丢失等问题频繁出现&#xff0c;严…...

别再只会用imshow了!Matlab图像显示从入门到精通,一篇搞定灰度、RGB、二值图

Matlab图像显示艺术&#xff1a;从imshow基础到专业级可视化技巧 第一次接触Matlab图像处理时&#xff0c;很多人会惊讶于简单的imshow()背后隐藏着如此丰富的可能性。这个看似基础的函数&#xff0c;实际上是一把打开图像可视化大门的万能钥匙。本文将带你超越基础用法&#x…...

Mplus链式中介保姆级教程:从数据准备到结果解读,手把手教你搞定Bootstrap检验

Mplus链式中介模型实战指南&#xff1a;从理论到结果可视化全解析 在社会科学研究中&#xff0c;中介效应分析已经成为探究变量间作用机制的重要方法。特别是链式中介模型&#xff0c;能够揭示变量间更复杂的传导路径。本文将从一个虚构但典型的研究问题出发——"社交媒体…...

从NTU RGB+D到NTU RGB+D 120:骨架行为识别数据集的演进与动作标签全景解析

1. 骨架行为识别数据集的演进背景 骨架行为识别是计算机视觉领域的重要研究方向&#xff0c;它通过分析人体关节点的运动轨迹来识别和理解人类行为。在这个领域中&#xff0c;高质量的数据集是算法研发和性能评估的基础。NTU RGBD系列数据集作为该领域的标杆性资源&#xff0c;…...

终极显卡驱动清理工具Display Driver Uninstaller完整使用指南

终极显卡驱动清理工具Display Driver Uninstaller完整使用指南 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-uninstaller …...

Qwen3-4B-Instruct部署教程:NVIDIA驱动版本兼容性验证与升级指南

Qwen3-4B-Instruct部署教程&#xff1a;NVIDIA驱动版本兼容性验证与升级指南 1. 模型简介 Qwen3-4B-Instruct-2507是Qwen3系列的端侧/轻量旗舰模型&#xff0c;专为高效推理和实际应用场景优化设计。该模型原生支持256K token&#xff08;约50万字&#xff09;的超长上下文窗…...

百度网盘直连解析:免费解决限速困扰的终极方案

百度网盘直连解析&#xff1a;免费解决限速困扰的终极方案 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 你是否曾为百度网盘的非会员下载速度而苦恼&#xff1f;面对几十KB/…...

平板电脑Linux内核显示配置实战:绕过HDMI探测,手动指定DP-1接口与分辨率

平板电脑Linux内核显示配置实战&#xff1a;绕过HDMI探测&#xff0c;手动指定DP-1接口与分辨率 在嵌入式设备开发中&#xff0c;显示配置往往是工程师面临的第一个挑战。不同于标准PC环境&#xff0c;平板电脑、工控设备等定制化硬件通常采用固定连接的显示屏&#xff0c;缺乏…...

从3ds Max无缝迁移到Blender:BsMax插件让3D艺术家零成本过渡

从3ds Max无缝迁移到Blender&#xff1a;BsMax插件让3D艺术家零成本过渡 【免费下载链接】BsMax BsMax Blender Addon (UI simulator/ Modeling/ Rigg & Animation/ Render Tools and ... 项目地址: https://gitcode.com/gh_mirrors/bs/BsMax 你是否曾经因为工作需要…...