JAVA-集合相关

news/2024/9/19 14:37:41 标签: java, 开发语言

HashMap如何解决哈希冲突的?

  1. 计算hash值,基于hashCode计算
  2. 冲突之后,先是使用链式寻址法
  3. 当链表长度大于8,且hash表的容量大于60的时候,再添加元素则转化成红黑树

为什么计算hash值是,是将hash地址的值右移16取异或?
核心目的:减少hash冲突的概率。

hashMap什么时候扩容?
大于当前容量的75%时,执行扩容操作
当 HashMap 元素个数达到扩容阈值,默认是 12 的时候,会触发扩容。
默认扩容的大小是原来数组长度的 2 倍,HashMap 的最大容量是 Integer.MAX_VALUE,也就是 2^31-1。在这里插入图片描述

HashMap会什么会产生死循环?

只有1.7存在这个问题,1.8已经解决了。头插法。
在这里插入图片描述
如果线程A和线程B同时触发了扩容操作,此时,A处于扩容中,而B线程已经扩容完成,则A对应的指针操作,此时A对应的节点如下:
死循环达成。
在这里插入图片描述

ConcurrentHashMap的底层实现原理?

线程安全===怎么实现的?syns?lock?

  1. 数据结构:数组+单向链表+红黑树组成
  2. 并发安全:对指定的node节点加锁,来保证数据更新的安全性

ConcurrentHashMap的size方法线程安全吗?
非线程安全方法。
在这里插入图片描述

ConcurrentHashMap 为什么不允许key为null?

线程安全的角度去考虑

ConcurrentHashMap 这么设计的原因是为了避免在多线程并发场景下的歧义问题。
也就是说,当一个线程从 ConcurrentHashMap 获取某个 key,如果返回的结果是 null 的时候。
这个线程无法确认,这个 null 表示的是确实不存在这个 key,还是说存在 key,但是 value 为空。
这种不确定性会造成线程安全性问题,而 ConcurrentHashMap 本身又是一个线程安全的集合。
所以才这么设计。

ArrayList 自动扩容机制?

在这里插入图片描述


http://www.niftyadmin.cn/n/5665713.html

相关文章

Vue+nodejs+express汽车配件商城销售管理系统 i9cgz

目录 技术栈具体实现截图系统设计思路技术可行性nodejs类核心代码部分展示可行性论证研究方法解决的思路Express框架介绍源码获取/联系我 技术栈 该系统将采用B/S结构模式,开发软件有很多种可以用,本次开发用到的软件是vscode,用到的数据库是…

谈谈你对线程池的了解

一、什么是线程池 线程池是一种创建和管理线程的技术。 二、怎么创建线程池 通过Executors工具类的静态方法,创建线程池。创建ThreadPoolExecutor对象,按照业务需要,自定义线程参数,创建线程池。 三、线程池的状态有哪些 线程池的…

ESP32-S3百度文心一言大模型AI语音聊天助手(支持自定义唤醒词训练)【手把手非常详细】【万字教程】

简介 此项目主要使用ESP32-S3实现一个AI语音聊天助手,可以通过该项目熟悉ESP32-S3 arduino的开发,百度语音识别,语音合成API调用,百度文心一言大模型API的调用方法,音频的录制及播放,SD卡的读写&#xff0c…

API 接入前的安全防线:注意事项全梳理

在当今数字化的商业环境中,API(Application Programming Interface)的广泛应用为企业带来了诸多便利,但同时也伴随着潜在的安全风险。在接入 API 之前,构建坚实的安全防线至关重要。以下是对 API 接入前安全注意事项的…

5分钟部署Prometheus+Grafana批量监控Linux服务器

给你送挂来了,宝~~ 详细讲解如何在 Linux 服务器上使用 Docker 容器快速部署 Prometheus 和 Grafana 监控系统,同时通过 node_exporter 采集全面的系统性能数据。整个流程涵盖了从环境配置到搭建一个全面监控平台的每个步骤 1,一键安装Node…

自监督的主要学习方法

自监督学习是一种机器学习方法,其中模型从未标注的数据中学习生成标签,通常通过构造预训练任务或预测任务来从数据的内部结构中提取信息。它的核心目标是利用无监督的数据进行学习,从而在下游任务中更好地利用监督信号。自监督学习的主要方法…

53.【C语言】 字符函数和字符串函数(strcmp函数)

7.strcmp函数 *简单使用 cplusplus的介绍 点我跳转 strcmp:string compare 字符串比较 具体讲解见此文 点我跳转 *例题 求下列代码的执行结果 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> int main() {char arr1[20] { &quo…

C++学习, 异常处理

C 提供了异常处理机制&#xff0c;允许程序在运行时检测和处理错误情况。这种机制通过 try、catch 和 throw 关键字来实现。当程序遇到异常情况时&#xff0c;它可以抛出一个异常&#xff0c;然后控制权转移到能够处理该异常的代码块。 基本概念 throw&#xff1a;用于抛出一…