【面经总结】Java集合 - Map

news2024/10/6 4:05:02

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.coloradmin.cn/o/1828435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年【山东省安全员A证】考试资料及山东省安全员A证试题及解析

题库来源:安全生产模拟考试一点通公众号小程序 山东省安全员A证考试资料是安全生产模拟考试一点通总题库中生成的一套山东省安全员A证试题及解析,安全生产模拟考试一点通上山东省安全员A证作业手机同步练习。2024年【山东省安全员A证】考试资料及山东省…

黑马程序员Springboot2简单学习笔记

Session是用于存放用户与web服务器之间的会话,即服务器为客户端开辟的存储空间。 文章:lombok Slf4j注解 Slf4j是用作日志输出的,一般会在项目每个类的开头加入该注解 可以配置静态资源的访问路径 这样访问任何的静态资源 但是每个页面都得…

20. mediasoup服务器的布署与使用

Mediasoup Demo部署 架构服务分析 服务端提供3个服务: 1.www服务,浏览器通过访问服务器目录获取客户端代码,通过V8引擎,启动底层WebRTC 2.nodejs提供websocket服务和http服务,用于信令交互 3.Mediasoup C提供的流媒体…

Ui学习--UITableView

UI学习 UITableView基础UITableView协议UITableView高级协议与单元格总结 UITableView基础 UITableView作为iOS中的一个控件,用于以表格形式展示数据。例如通讯录好友,朋友圈信息等,都是UITableView的实际运用场景。 首先我们先要加入两个协…

ARM32开发--电源管理单元

知不足而奋进 望远山而前行 目录 文章目录 前言 学习目标 学习内容 PMU 电源域 VDD/VDDA域 备份域 1.2V域 省电模式 睡眠模式 深度睡眠模式 待机模式 几种模式总结 WFI和WFE指令 案例需求 模式初始化 源码 总结 前言 在嵌入式系统中,有效的电池管…

使用kettle做的数据同步案例

1 mongo同步数据到mysql中 我想把51万8400的计算出来的八字信息,从mongo同步到mysql,看看在mysql中运行会怎么样。 选择mongodb input,这个是在Big Data中。 填写数据库和表 获取到mongodb的字段,获取到mongo的字段,如果某个字段…

Windows10 利用QT搭建SOEM开发环境

文章目录 一. SOEM库简介二. 安装WinPcap三. SOEM(1.4)库安装(1) 编译32位库(2) 编译64位库 四. 运行SOEM示例代码五. WIN10下利用QT构建SOEM开发环境 一. SOEM库简介 SOEM(Scalable Open EtherCAT Master 或 Simple Open EtherCAT Master)是一个开源的…

SwiftUI 6.0(iOS 18)新容器视图修改器漫谈

概览 本届 WWDC 2024 观影正如火如荼的进行中,一片鸟语花香、枝繁叶茂的苹果树上不时结出几颗令人垂涎欲滴的美味苹果让秃头码农们欲罢不能。 如您所愿,在界面布局“利器” SwiftUI 这根蔓藤也长出不少喜人的果实,其中在 iOS 18.0 中新添加的…

1949年到2021年中国历年稻谷产量统计报告

数据介绍 数据来源于国家统计局,为1949年到2021年我国每年的稻谷产量数据。 2021年,我国稻谷产量为21284.24万吨,比上年增长0.5%。 数据统计单位为:万吨 我国稻谷产量有多少? 2021年,我国稻谷产量为2128…

TIA Portal 博途西门子自动化编程软件下载安装,TIA Portal 提高生产效率!

驱动编程功能则是TIA Portal的又一亮点,它支持各种驱动器的编程和配置,使设备能够精准地执行各种运动控制任务。此外,SCADA(监控与数据采集)编程功能使得用户可以实时监控生产过程的各项数据,确保生产过程的…

全网爆火的AI语音合成工具-ChatTTS,有人已经拿它赚到了第一桶金,送增强版整合包

上篇分享了如何从0到1搭建一套语音交互系统。 其中,语音合成(TTS)是提升用户体验的关键所在。 不得不说,AI 语音界人才辈出,从之前的Bert-Sovit,到GPT-Sovits,再到最近一周狂揽了 1w Star 的C…

在顺序表中使用顺序查找法查找某个关键字

//顺序表中顺序查找(SeqSearch) #include<stdio.h> #include<stdlib.h> #define MAX 100 #include<assert.h> typedef struct {int data[MAX];int length; }SeqList; int SeqSearch(SeqList* S, int key)//key为要查找的值 {printf("关键字序列&#xf…

11.泛型、trait和生命周期(上)

标题 一、泛型数据的引入二、改写为泛型函数三、结构体/枚举中的泛型定义四、方法定义中的泛型 一、泛型数据的引入 下面是两个函数&#xff0c;分别用来取得整型和符号型vector中的最大值 use std::fs::File;fn get_max_float_value_from_vector(src: &[f64]) -> f64…

转让注册地址在北京的无区域投资管理集团公司

公司名称中不带省市地域&#xff0c;或是公司名称没有行业表述的公司&#xff0c;都是要在工商总局进行核名的&#xff0c;我们简称为总局无区域核名公司&#xff0c;此类公司的注册须经总局局批准&#xff0c;名称可以不带省市地域、行业特点&#xff0c;现在公司名称新核准已…

LeetCode206-反转链表

题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 代码 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* …

【网络编程】进程间的通信

进程间通信意味着两个不同进程间交换数据&#xff0c;操作系统中应提供两个进程可以同时访问内存空间。 管道实现进程间通信 管道不属于进程资源&#xff0c;与套接字一样属于操作系统。两个进程通过操作系统提供内存空间进行通信 #include<unistd.h> int pipe(int fil…

高考志愿填报,如何选择大学专业?

选择大学专业是一件需要谨慎的事情&#xff0c;需要综合考虑各个因素。大学专业和将来的就业方向是一致的&#xff0c;选专业实际就是在选职业&#xff0c;选自己未来几十年的职业生活。如何去选择大学专业&#xff0c;建议从个人兴趣&#xff0c;个人优势能力&#xff0c;职业…

大家来决定:python-office运行时的提示信息,要不要删除?

​ 大家好&#xff0c;这里是程序员晚枫&#xff0c;今天想请大家投票决定一下&#xff1a;运行python-office时的下面这种中文提示信息&#xff0c;要不要全部都取消了&#xff1f;&#x1f447; 为什么加这个提示&#xff1f; 我是在2022年发布的这个开源项目&#xff0c;并…

Ctrl+Back(回退键)快捷键失效,导致IDEA不能删除多个字符

CtrlBackspace快捷键差不多失效了2年&#xff0c;因为没怎么用笔记本了&#xff0c;所以就没管。这阵子开始用了&#xff0c;在Idea里面不能通过CtrlBack的方式删除&#xff0c;只能一个个字符删除&#xff0c;真的难受。 后面尝试退出一些软件&#xff0c;停止一些服务&#x…

Bio-Info每日一题:Rosalind-07-Mendel‘s First Law(孟德尔第一定律 python实现)

&#x1f389; 进入生物信息学的世界&#xff0c;与Rosalind一起探索吧&#xff01;&#x1f9ec; Rosalind是一个在线平台&#xff0c;专为学习和实践生物信息学而设计。该平台提供了一系列循序渐进的编程挑战&#xff0c;帮助用户从基础到高级掌握生物信息学知识。无论你是初…