自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 资源 (3)
  • 收藏
  • 关注

原创 对比 HashMap 和 ConcurrentHashMap 扩容逻辑的差异

比较维度HashMap扩容线程单线程多线程协作是否线程安全❌ 否✅ 是是否阻塞写操作是(扩容期间)否,允许边扩边写桶迁移方式一次性整体迁移分段迁移,ForwardingNode 标记扩容中可否 put❌ 一般卡住✅ 可 put,会协助迁移HashMap:单线程↑所有 put 操作都阻塞多线程协作↓ ↓ ↓发现需要扩容,参与 helpTransfer()↓ ↓ ↓每个线程搬自己那一段我们继续深入解析 ConcurrentHashMap扩容过程中的多线程协作。

2025-04-09 20:01:24 863

原创 分析下HashMap容量和负载系数,它是怎么扩容的?

概念默认值说明capacity16必须为 2 的幂次方loadFactor0.75平衡查询效率与空间浪费threshold超过该值将触发扩容resizeO(n)将所有元素重新分桶我们写一个简单的 Java 示例来演示HashMap的 resize 过程,包括扩容前后容量的变化、触发阈值等。我们还会插入调试打印语句以观察内部行为。优点描述效率高只用一次位运算,无需重新计算 hash减少冲突重新分布节点,有助于均衡哈希桶分布内存复用节点对象不重建,仅更换位置。

2025-04-09 19:58:58 925

原创 分析一下HashMap内部是怎么实现的

当然可以!我们来深入分析一下 Java 中HashMap的内部实现机制(以为主),包括数据结构、核心算法、源码设计、以及适用场景。

2025-04-09 19:55:30 520

原创 B-tree 的原理源码分析及应用场景等

B-tree(B树)是一种,广泛用于等对有高要求的场景。相比于二叉搜索树(BST),B-tree 可以减少磁盘I/O次数,提升整体性能。

2025-04-09 19:06:38 920

原创 基于二叉堆实现的 PriorityQueue

/ 输出 7int age;// 输出 Bob(25)支持删除任意元素支持更新某个元素的优先级支持构造函数初始化时传入一个集合基于二叉堆实现的 PriorityQueue 因其高效的插入和删除最小(或最大)元素操作,在很多应用场景中都有着广泛的运用。基于二叉堆实现的 PriorityQueue 以其简单、高效的特性,在图算法、事件调度、任务调度、排序以及网络、金融等众多领域都有重要应用。

2025-04-09 19:02:06 984

原创 你了解B+树吗?它有哪些使用场景呢?

B+ 树不仅在数据库索引中广泛使用,还在许多需要高效数据存储、查询和范围查找的场景中应用。B+ 树相比 AVL 树、红黑树等数据结构,更适合数据库的。,B+ 树相比 AVL 树、红黑树等具有明显优势。MySQL InnoDB B+ 树的核心代码在。如果使用 AVL 树或红黑树,范围查询需要。,为高效数据存储和检索提供了强大支持!MySQL InnoDB 使用。B+ 树的叶子节点按顺序排列,并。MySQL InnoDB 使用。作为其主要的索引结构,用于。MySQL 采用 B+ 树,B+ 树在文件系统中用于。

2025-03-25 16:10:17 694

原创 AVL树(Adelson-Velsky and Landis Tree)了解及使用场景

的二叉搜索树,每次插入或删除时都要保持平衡,因此查询速度快,但插入和删除比红黑树稍慢。当插入或删除节点导致某个祖先节点的BF超出{-1,0,1},需要进行旋转恢复平衡。,从而保证了查找、插入和删除的时间复杂度始终保持在 ( O(\log n) )。右子树过高(BF < -1),并且新节点插入在右子树的右侧。左子树过高(BF > 1),并且新节点插入在左子树的左侧。右子树过高(BF < -1),但新节点插入在右子树的左侧。左子树过高(BF > 1),但新节点插入在左子树的右侧。BST 的搜索时间复杂度在。

2025-03-25 15:15:06 711

原创 了解TreeMap 红黑树

相比红黑树,AVL 树的平衡性更严格,但它的插入和删除操作成本更高。中,所有操作(插入、删除、查找)都是基于。级别,即使在最坏情况下,也不会退化成链表。这种情况下,BST 失去了其高效性,因此。,是一个合理的选择。作为底层数据结构,主要是为了解决。,导致最坏情况下的时间复杂度变为。作为存储结构,对应的核心类是。包中的一个重要集合,它基于。,因此传统的哈希表(如。这些规则确保了红黑树的。,确保树的高度维持在。除了红黑树,还有另一种。

2025-03-25 11:38:26 725

原创 关于HashMap 的equals 方法和 hashCode 方法,你一定要了解的几项

hashCode()和equals()如果两个对象通过equals()方法相等,它们的hashCode()必须相等。如果hashCode()不相等,equals()不一定要相等(哈希冲突)。hashCode()对象的哈希值应该在对象的生命周期内保持一致,除非对象的状态(特别是影响hashCode()的字段)发生变化。equals()equals()必须遵循自反性、对称性、传递性、一致性等特性,并且对null的比较应返回false。重写hashCode()时,必须重写equals()如果类重写了。

2025-03-17 16:33:15 864

原创 你了解EnumMap吗

EnumMap是一个非常高效且适合用于枚举类型键值对的Map。仅限于枚举键,适合场景是枚举与值之间的映射。高效存储、访问,且内存占用少。保持枚举的自然顺序,适合需要按顺序遍历的情况。如果你有键是枚举类型的需求,EnumMap是一个理想的选择。

2025-03-17 16:15:52 318

原创 Java8并行排序算法

是最直接和简单的方式,适用于对数组进行并行排序。提供了一种使用流 API 的方式,适用于集合的并行排序。是一种更底层的并行处理方式,适用于需要更细粒度控制的并行任务。通常来说,推荐使用或,因为它们更简洁并且易于使用,适用于一些特殊需求的场景。

2025-03-17 15:44:06 294

原创 Java 双轴快速排序(Dual-Pivot QuickSort)

是一种改进版的快速排序算法,由 Vladimir Yaroslavskiy 在 2009 年提出。与经典的单轴快速排序(Single-Pivot QuickSort)相比,它通过选择来对数组进行划分,从而提高排序效率。自 JDK 7 开始,Java 的用于排序int[]long[]double[]等原始类型数组时,采用的就是双轴快速排序。

2025-03-17 10:08:39 725

原创 了解TimSort

TimSort 是一个高效的排序算法,结合了插入排序和归并排序的优点。它特别适用于已经部分有序的数据,能够在大部分实际场景中提供出色的性能。在 Python 和 Java 中的广泛应用证明了它在处理各种数据排序问题时的可靠性和效率。尽管 TimSort 的实现比其他排序算法稍复杂,但它在大多数情况下都能比传统的O(n log n)排序算法表现得更为高效,特别是当输入数据有部分排序时。

2025-02-19 21:03:30 756

原创 Spring AOP 支持的两种模式动态代理(JDK Proxy 和 cglib)

在 Spring 中,AOP(面向切面编程)可以通过动态代理实现。和。这两种方式各有特点,适用于不同的场景。

2025-02-19 19:49:04 720

原创 benchmark是什么

基准测试 是性能优化的核心工具,它帮助开发者量化代码、算法或系统的性能,找出瓶颈并进行优化。在 Java 中,JMH 是进行准确、可靠基准测试的首选工具,能够克服常见的 JIT 编译和垃圾回收带来的误差。

2025-02-10 20:43:34 990

原创 如何理解java的幻象引用

幻象引用提供了一种在对象被垃圾回收前进行通知的机制,适用于需要在对象回收时进行特定清理操作的场景。与其他引用类型相比,幻象引用的功能较为特殊,主要用于一些低级的内存管理任务,尤其是在涉及资源释放时非常有用。

2025-02-10 20:23:28 611

原创 Flink 窗口机制深入解析与自定义触发器、剔除器、ProcessFunction

Flink 的窗口机制是流处理中的一个核心概念,旨在对无限数据流进行分组并执行批处理。Flink 提供了丰富的窗口功能,如滚动窗口、滑动窗口和会话窗口等,以及自定义触发器(Trigger)、剔除器(Evictor)和 ProcessFunction,使得开发者可以根据实际需求灵活地处理流数据。本文将深入解析 Flink 窗口机制的源码实现,并详细讲解如何自定义触发器、剔除器以及如何使用 ProcessFunction。触发器是决定何时关闭窗口的关键部分。

2024-12-23 11:37:53 573

原创 UltraEdit 编辑器 正则 查找替换(UltraEdit语法)

一. 常用单个正则符号释义符号 功能 % 匹配行的开始 - 显示搜索字符串必须在行的开始,但是在所选择的结果字符串中不包括任何行终止字符。 $ 匹配行尾 - 显示搜索字符串必须在行尾,但是在所选择的结果字符串中不包括任何行终止字符。 ? 除了换行符以外匹配任何单个的字符 * 除了换行符匹配任何数...

2020-02-26 13:30:05 1045

原创 C++学习总结(上)

1. C++支持三种头文件:C头文件 .hC++头文件(与C冲突时默认写成.h).hpp 2. 命名空间可以有效避免大型项目命名冲突using namespace std;//使用之前声明即可namespace space{函数变量}3. const常量volatile防止自动优化 4. 更严格的强制类型转换不同类型的指针不能强制赋值,必...

2018-08-31 19:55:15 203

spring-framework-4.2.1.rar

spring-framework-4.2.1jar包完整版,spring-framework-4.2.1jar包完整版,spring-framework-4.2.1jar包完整版,spring-framework-4.2.1jar包完整版,spring-framework-4.2.1jar包完整版,spring-framework-4.2.1jar包完整版,spring-framework-4.2.1jar包完整版,spring-framework-4.2.1jar包完整版,

2018-08-02

powerdesigner生成数据字典模板

powerdesigner生成数据字典模板,powerdesigner生成数据字典模板,powerdesigner生成数据字典模板powerdesigner生成数据字典模板powerdesigner生成数据字典模板powerdesigner生成数据字典模板powerdesigner生成数据字典模板powerdesigner生成数据字典模板powerdesigner生成数据字典模板powerdesigner生成数据字典模板powerdesigner生成数据字典模板powerdesigner生成数据字典模板powerdesigner生成数据字典模板powerdesigner生成数据字典模板

2018-08-02

log4j-1.2.17.jar及配置文件

log4j-1.2.17.jar及配置文件,消耗1积分 log4j-1.2.17.jar及配置文件,消耗1积分 log4j-1.2.17.jar及配置文件,消耗1积分 log4j-1.2.17.jar及配置文件,消耗1积分 log4j-1.2.17.jar及配置文件,消耗1积分

2018-05-16

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除