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

【面经总结】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.lryc.cn/news/373821.html

相关文章:

  • CompletableFuture方法介绍及代码示例
  • 基于springboot的宠物商城网站
  • DM存储ontap系统修改管理IP
  • Web前端商业素材:挖掘价值,释放创意的无限可能
  • LeetCode206-反转链表
  • 5000天后的世界
  • Photoshop中颜色与色调的调整
  • 【退役之重学Java】终结篇,暂别 Java !
  • 查找——顺序查找和折半查找
  • Bio-Info每日一题:Rosalind-07-Mendel‘s First Law(孟德尔第一定律 python实现)
  • C++ 47 之 函数调用运算符重载
  • [Qt的学习日常]--常用控件1
  • 模型实战(23)之 yolov10 使用总结及训练自己的数据集
  • AIRNet模型使用与代码分析(All-In-One Image Restoration Network)
  • 欧洲杯“球迷狂欢趴”开启,容声带来“健康养鲜”新理念
  • 人工智能对零售业的影响
  • Spring Boot + EasyExcel + SqlServer 进行批量处理数据
  • 深入理解指针(四)
  • k-means聚类模型的优缺点
  • 我的创作纪念日(1825天)
  • Studio One 6.6.2 for Mac怎么激活,有Studio One 6激活码吗?
  • Windows搭建nacos集群
  • kotlin 中的字符
  • yocto根文件系统如何配置静态IP地址
  • 【博客720】时序数据库基石:LSM Tree的辅助优化
  • C++前期概念(重)
  • Java字符串加密HMAC-SHA1密钥,转换成Base64编码
  • 【网络架构】Nginx
  • C# OpenCvSharp 逻辑运算-bitwise_and、bitwise_or、bitwise_not、bitwise_xor
  • JVM常用概念之扁平化堆容器