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

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不需要连续内存空间

相关推荐
冷琴19967 分钟前
基于java+springboot的酒店预定网站、酒店客房管理系统
java·开发语言·spring boot
daiyang123...33 分钟前
IT 行业的就业情况
java
爬山算法1 小时前
Maven(6)如何使用Maven进行项目构建?
java·maven
.生产的驴1 小时前
Electron Vue框架环境搭建 Vue3环境搭建
java·前端·vue.js·spring boot·后端·electron·ecmascript
爱学的小涛1 小时前
【NIO基础】基于 NIO 中的组件实现对文件的操作(文件编程),FileChannel 详解
java·开发语言·笔记·后端·nio
吹老师个人app编程教学1 小时前
详解Java中的BIO、NIO、AIO
java·开发语言·nio
爱学的小涛1 小时前
【NIO基础】NIO(非阻塞 I/O)和 IO(传统 I/O)的区别,以及 NIO 的三大组件详解
java·开发语言·笔记·后端·nio
北极无雪1 小时前
Spring源码学习:SpringMVC(4)DispatcherServlet请求入口分析
java·开发语言·后端·学习·spring
琴智冰1 小时前
SpringBoot
java·数据库·spring boot