Java面试基础|数据结构 -实时更新

news2024/11/13 9:30:31

1.HashMap和ConcurrentHashMap介绍

在这里插入图片描述
核心是一个Node数组,数据结构与hashMap相似
使用CAS操作来实现无锁的更新,提高了并发性。当更新节点时,它会使用CAS来替换节点的值或链接,如果CAS失败,表明有其他线程也在进行修改,当前线程可以重试或锁定节点
对于复杂的结构修改操作 ConcurrentHashMap 使用synchronized关键字来锁定特定的节点。

.CAS是什么

CAS是一种用于实现多线程同步的机制。它是一种无锁的非阻塞算法的一部分,广泛应用于多线程编程中,用于实现高效的同步控制。
CAS的基本思想:
CAS操作包含三个参数:内存位置(V),预期原值(A)和新值(B)。CAS具体操作如下:
比较: 它首先检查内存位置V的当前值是否与预期原值A相等。
交换: 如果相等,那么处理器会自动将该位置值更新为新值B。
否则: 如果不相等,说明其他线程已经修改了该位置的数据,CAS操作失败

hashMap插入的过程

1)计算key的哈希码,使用哈希函数将哈希码转换为数组索引
2)上一步得到的索引,定位到内部数组的特定位置
3)由于不同的键可能产生相同的索引
如果是链表,则遍历链表,使用 equals() 方法比较键对象,直到找到匹配的键。
如果是红黑树,则在树中进行搜索,直到找到匹配的键。

自定义类作为hashmap的key,那么这个key要满足什么要求

1)正确实现 hashCode()、equals()方法
2)如果两个对象通过 equals() 方法比较是相等的,那么这两个对象调用 hashCode() 方法必须产生相同的整数结果。如果两个对象通过 equals() 方法比较是不相等的,理想情况下它们的 hashCode() 方法产生的整数也应该不同

HashMap改用红黑树讲讲为什么**

链表可能会变得很长,这意味着查找效率会降低到O(n)。将链表转换成红黑树,这样即使在最坏的情况下,查找效率也能保持在O(log n)
红黑树
任何一条从根到叶子的路径上各个节点的颜色进行约束,红黑树确保没有一条路径会比其他路径长出两倍,由此达到近似平衡的效果

2. ArrayList和LinkedList的底层原理和区别**

ArrayList
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ArrayList 线程不安全,没有synchronized
LinkedList
在这里插入图片描述
在这里插入图片描述
ArrayList和LinkedList的区别
ArrayList需要连续内存空间
LinkedList不需要连续内存空间

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

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

相关文章

C语言--单链表的创建及使用详解

C语言--单链表的创建及使用详解 1. 单链表定义1.1 工作原理1.2 优点 2. 单链表的创建2.1 文件创建2.2 节点创建2.3 链表显示 3. 链表操作3.1 尾插3.2 头插3.3 尾删3.4 头删3.5 指定数据寻找3.6 指定位置前插入3.7 指定位置删除 4. 单链表总内容4.1 test.c文件4.2 SList.h文件4.…

强化学习应用(一):基于Q-learning的物流配送路径规划研究(提供Python代码)

一、Q-learning算法简介 Q-learning是一种强化学习算法,用于解决基于马尔可夫决策过程(MDP)的问题。它通过学习一个值函数来指导智能体在环境中做出决策,以最大化累积奖励。 Q-learning算法的核心思想是使用一个Q值函数来估计每…

ubuntu连接xshell怎么连接

在网上找了好多办法都不行 例如 太久没打开Ubuntu可能输入命令查不到IP地址,解决办法也比较简单,首先第一步 确定自己能不能进入管理员root权限(输入命令su),如果没有的话得重新配置,如下图 这是因为当前Ub…

DC-DC变换集成电路芯片B34063——工作电压范围宽,静态电流小

B34063为一单片DC-DC变换集成电路,内含温度补偿的参考电压源(1.25V)、比较器、能有效限制电流及控制工作周期的振荡器,驱动器及大电流输出开关管等,外配少量元件,就能组成升压、降压及电压反转型DC-DC变换器。 主要特点: ● 工作…

文本翻译GUI程序,实现简单的英汉互译

项目地址:mendianyu/txtTranslate: 文本翻译GUI程序,实现简单的英汉互译 (github.com) 文本翻译GUI程序,实现简单的英汉互译 项目结构 三个java文件加一个pom文件 项目运行效果 语言可选择en(英语) zh(汉语) auto(自动识别,仅源语…

推荐算法常见的评估指标

推荐算法评估指标比较复杂,可以分为离线和在线两部分。召回、粗排、精排和重排由于定位区别,其评估指标也会有一定区别,下面详细讲解。 1 召回评价体系 召回结果并不是最终推荐结果,其本质是为后续排序层服务的,故核…

【深度学习目标检测】十五、基于深度学习的口罩检测系统-含GUI和源码(python,yolov8)

YOLOv8是一种物体检测算法,是YOLO系列算法的最新版本。 YOLO(You Only Look Once)是一种实时物体检测算法,其优势在于快速且准确的检测结果。YOLOv8在之前的版本基础上进行了一系列改进和优化,提高了检测速度和准确性。…

通过IP地址识别风险用户

随着互联网的迅猛发展,网络安全成为企业和个人关注的焦点之一。识别和防范潜在的风险用户是维护网络安全的关键环节之一。IP数据云将探讨通过IP地址识别风险用户的方法和意义。 IP地址的基本概念:IP地址是互联网上设备的独特标识符,它分为IP…

前端工程化相关

工具方法: 知道软件包名,拿到源码或者路径的方法 在浏览器输入以下内容,就可以找到你想要的。。。 unpkg.com/输入包名 一、模块化 ESM特性清单: 自动采取严格模式,忽略“use strict”每个ESM模块都是单独的私有作用…

“华为杯“第四届中国研究生数学建模竞赛-D题:邮路规划与邮车调度

目录 摘 要: 1.问题的重述 2.模型的假设与符号说明 2.1 针对本问题,本文做出如下假设 2.2 符号说明 3.问题的数学模型 4.问题的求解 4.1 问题一的求解 4.1.1 最少邮车数的求法 4.1.2 邮路规划及路径选择 4.1.3 问题的求解结果 4.2 问题二的求…

FPGA之初探

FPGA的构成 基本逻辑单元CLB CLB是FPGA的基本逻辑单元, 一个 CLB 包括了 2 个 Slices,所以知道Slices的数量就可以知道FPGA的“大概”逻辑资源容量了。一个 Slice 等于 4 个6输入LUT8个触发器(flip-flop)算数运算逻辑,每个 Slice 的 4 个触发…

在线的货币兑换平台源码下载

在线的货币兑换平台,可帮助全球各地的个人和企业将货币从一种货币兑换为另一种货币。该货币兑换平台是 Codecanyon 中最先进的脚本。 源码下载:https://download.csdn.net/download/m0_66047725/88728084

VMware 安装及创建一个 CentOS Stream 的详细指南

文章目录 1. 简介2. 下载和安装1)通过官网安装2)通过电脑管家安装 3. 下载操作系统镜像包4. 创建虚拟机结语 1. 简介 在过去,服务器通常是运行单一操作系统和应用程序的物理设备。这就导致了硬件资源浪费和管理复杂性的增加。为了解决这些问…

【C++刷题】位运算

【C刷题】位运算 一、二进制中最右侧的11、位1的个数(1)题目链接(2)解析(3)代码 2、比特位计数(1)题目链接(2)解析(3)代码 3、汉明距离…

LTESniffer:一款功能强大的LTE上下行链路安全监控工具

关于LTESniffer LTESniffer是一款功能强大的LTE上下行链路安全监控工具,该工具是一款针对LTE的安全开源工具。 该工具首先可以解码物理下行控制信道(PDCCH)并获取所有活动用户的下行链路控制信息(DCI)和无线网络临时…

重温经典struts1之自定义全局异常处理类处理异常以及<exeception>标签的配置

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 前面的文章,我们学习了,Action类中调用Service,通过try…catch代码块,catch自定义异常类,通过ActionMessage…

cesium粒子效果——船舰水花效果

效果: 实现思路(最后有完整代码): 与上篇文章思路一样 无非就是更换了模型与粒子图片以及粒子的配置,上一篇文章链接:https://blog.csdn.net/m0_63701303/article/details/135551667?spm1001.2014.3001.5…

neo4j 图数据库 py2neo 操作 示例代码

文章目录 摘要前置NodeMatcher & RelationshipMatcher创建节点查询获取节点节点有则查询,无则创建创建关系查询关系关系有则查询,无则创建 Cypher语句创建节点 摘要 利用py2neo包,实现把excel表里面的数据,插入到neo4j 图数据…

React Native 环境安装

Notion – The all-in-one workspace for your notes, tasks, wikis, and databases. 搭建开发环境 React Native 中文网 Homebrew(包管理器) → rvm(ruby版本管理) → ruby → cocoapods 安装 Homebrew Homebrew /bin/ba…

java每日一题——ATM系统编写(答案及编程思路)

前言: 基础语句学完,也可以编写一些像样的程序了,现在要做的是多加练习,巩固下知识点,打好基础,daydayup! 题目:模仿银行ATM系统,可以创建用户,存钱,转账&…