【面经总结】Java集合 - Map

Map 概述

Map 架构

img

HashMap

要点

  1. 散列(哈希表) 方式存储键值对,访问速度快
  2. 没有顺序性
  3. 允许使用空值和空键
  4. 有两个影响其性能的参数:初始容量和负载因子。
    1. 初始容量:哈希表创建时的容量
    2. 负载因子:其容量自动扩容之前被允许的最大饱和量
  5. 不是线程安全的

Java7

数据结构

实现机制:**数组 + 链表,**通过链表解决哈希冲突。

  1. table:存储 K-V 的数组
  2. size:容量,初始为 16
  3. loadFactor:负载因子,默认为 0.75(元素个数超过容量的 75% 会触发自动扩容,扩容为原始的 2 倍)

img

获取元素 get

  1. 通过 key 的哈希计算存储位置
  2. 遍历链表

img

计算 hash 方式:高16位不变,低16位和高16位做异或

static final int hash(Object key) {
    int h;
    return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}

计算下标的时候,是使用 & 位操作,而非求余

(n - 1) & hash

优点:能使用32位计算哈希,避免因为高位没有参与下标的计算而碰撞

添加元素 put

  1. 通过 key 的哈希计算存储位置
  2. 查找 key 是否存在
    1. 存在:覆盖 Value
    2. 不存在:放到桶里 or 插入链表(头插法)

img

删除元素 remove

找到指定数据并修改链表引用

img

Java8

  • 实现机制:数组 + 链表 + 红黑树
  • 当容量达到 64,且元素达到 8 个时会将链表转为红黑树
  • 将链表插入方式改为尾插法(解决循环链表)

img

链表查询复杂度取决于链表长度,为 O(n)。为了降低开销,Java8 中当容量达到 64,且元素达到 8 个时会转为红黑树,降低复杂度为 O(logN)

Java7 使用 Entry 表示数据节点,Java8 使用 Node 和 TreeNode。

LinkedHashMap

在 HashMap 的基础上,维护一个双向链表,实现插入顺序

img

TreeMap

  1. 实现机制:红黑树
  2. 有序(默认为升序)
  3. Key 需要定义比较逻辑
    1. 实现 Comparable 接口
    2. 重写 compareTo() 方法

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

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

相关文章

国际统计年鉴(1995-2023年)

数据年份:1995-2023 数据格式:pdf、excel 数据内容:《国际统计年鉴》是一部综合性的国际经济社会统计资料年刊,收录了世界200多个国家和地区的统计数据,并对其中40多个主要国家和地区的经济社会发展指标及国际组织发布…

【数据结构】初识集合深入剖析顺序表(Arraylist)

【数据结构】初识集合&深入剖析顺序表(Arraylist) 集合体系结构集合的遍历迭代器增强for遍历lambda表达式 List接口中的增删查改List的5种遍历ArrayList详解ArrayList的创建ArrayList的增删查改ArrayList的遍历ArrayList的底层原理 🚀所属…

卡尔曼滤波源码注释和调用示例

卡尔曼滤波源码注释和调用示例 flyfish Python版本代码地址 C版代码地址 主要用于分析代码,增加了中文注释 import numpy as np import scipy.linalg""" 0.95分位数的卡方分布表,N自由度(包含N1到9的值)。 取自…

多源最短路径算法 -- 弗洛伊德(Floyd)算法

1. 简介 Floyd算法,全名为Floyd-Warshall算法,亦称弗洛伊德算法或佛洛依德算法,是一种用于寻找给定加权图中所有顶点对之间的最短路径的算法。这种算法以1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特弗洛伊德的名字命名。 2. 核心思…

打造私密的通信工具,极空间搭建免费开源的电子邮件管理程序『Cypht』

打造私密的通信工具,极空间搭建免费开源的电子邮件管理程序『Cypht』 哈喽小伙伴门好,我是Stark-C~ 说起电子邮件大家都不陌生,哪怕是在当前微信或者QQ已经非常普遍的今天,电子邮件在我们很多人的工作中都充当了重要的通信工具。…

【星座运势】本周财运分析,巨蟹座财富潜力大开!

大家好!今天我们来谈谈巨蟹座本周的财富运势。经过调查和数据分析,我发现巨蟹座这周的财运潜力很大!接下来,我将用通俗易懂的语言,通过代码说明,向大家展示巨蟹座的财富运势。 首先,我们需要通…

多设备互通、开箱即用的私有化笔记软件,极空间部署最强备忘录项目『Memos』

多设备互通、开箱即用的私有化笔记软件,极空间部署最强备忘录项目『Memos』 哈喽小伙伴们好,我是Stark-C~ 手机上的备忘录我想绝大多数的小伙伴都会用到,日常用来记录一下生活中的消费开支清单,或者工作中记录一些重要的任务或项…

【动态规划】0-1背包问题

【动态规划】0-1背包问题 题目:现在有四个物品,背包总容量为8,背包最多能装入价值为多少的物品? 我的图解 表格a【i】【j】表示的是容量为j的背包装入前i个物品的最大价值。 拿a【1】【1】来说,它的值就是背包容量为1,只考虑…

4.1 初探Spring Boot

初探Spring Boot实战概述 Spring Boot简介 Spring Boot是一个开源的Java框架,由Pivotal团队(现为VMware的一部分)开发,旨在简化Spring应用程序的创建和部署过程。它通过提供一系列自动化配置、独立运行的特性和微服务支持&#…

低代码开发MES系统,一周实现数字化

随着工业4.0和智能制造的兴起,企业对于生产过程的数字化、智能化需求日益迫切。制造执行系统(MES)作为连接计划层与控制层的关键信息系统,在提升生产效率、优化资源配置、保障产品质量等方面发挥着重要作用。然而,传统…

数据质量管理解决方案(55页PPT)

方案介绍: 数据质量管理解决方案是一个系统性的方法,旨在确保数据的准确性、完整性、一致性、可靠性和可用性。该解决方案覆盖了数据从产生到消亡的整个生命周期,包括数据的计划、获取、存储、共享、维护、应用和消亡等各个阶段。数据质量管…

IDEA导入项目报错java程序包不存在

如图文件结构,本来是在web-demo中操作,但是想导入一下其他模块,切换了项目文件的目录,发现需要重新对Tomcat等进行配置,配置好之后发现运行出现Java相关错误(如下)记录一下修正过程。 java: 程序…

【教程】Linux设置进程的优先级

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 关键指令 sudo chrt -f <优先级> <指令> 示例脚本 当然也可以不是启动Python脚本&#xff0c;普通的指令都可以&#xff0c;可自行适当修…

2024/6/16 英语每日一段

Nature has the means--to a degree--to limit the effects of climate change. Intact ecosystems such as forests, grasslands, oceans and peatlands are “carbon sinks”--natural storage systems that remove atmospheric carbon and other greenhouse gases--and are …

Intel HDSLB 高性能四层负载均衡器 — 代码剖析和高级特性

目录 文章目录 目录前言代码剖析软件架构目录结构配置解析启动流程分析数据面 jobs 注册数据面 jobs 执行 转发流程分析收包阶段L2 处理阶段L3 处理阶段L4 处理阶段 高级特性大象流转发优化快慢路径分离转发优化报文基础转发优化 最后参考文档 前言 在前 2 篇文章中&#xff0…

【云原生】Kubernetes----Kubernetes集群部署Prometheus 和Grafana

目录 引言 一、环境准备 二、部署node-exporter &#xff08;一&#xff09;创建命名空间 &#xff08;二&#xff09;部署node-exporter 1.获取镜像 2.定义yaml文件 3.创建服务 4.查看监控数据 三、部署Prometheus &#xff08;一&#xff09;创建账号并授权 &…

Java学习笔记之基本数据类型转换

前言 本篇文章是基于我本人在初学JAVA阶段想记录的的学习笔记&#xff0c;如有错误&#xff0c;恳请指正。今天要干掉的是JAVA的基本数据类型转换 Java的基本数据类型转换 前言一&#xff0c;基本数据类型复习二&#xff0c;基本介绍什么是自动类型转换&#xff1f; 三&#…

【Numpy】一文向您详细介绍 np.round()

【Numpy】一文向您详细介绍 np.round() 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&#xff0c;…

从0到1搭建MCU芯片上操作系统环境。开发都需要哪些环节和准备

MCU芯片环境搭建与操作系统上载步骤 1. 硬件准备 选择合适的MCU芯片&#xff0c;例如STM32、GD32等。 准备开发板&#xff0c;用于硬件连接和实验。 准备必要的外围设备&#xff0c;如电源适配器、USB转串口模块等。 2. 软件环境搭建 安装编程语言环境&#xff0c;如C/C编译…

NVIDIA Triton系列02-功能与架构简介

NVIDIA Triton系列02-功能与架构简介 B站&#xff1a;肆十二-的个人空间-肆十二-个人主页-哔哩哔哩视频 (bilibili.com) 博客&#xff1a;肆十二-CSDN博客 问答&#xff1a;(10 封私信 / 72 条消息) 肆十二 - 知乎 (zhihu.com) 前面文章介绍微软 Teams 会议系统、微信软件与腾讯…