2024年3月6日
HashMap 大家都清楚,底层是 数组 + (链表 / 红黑树),元素是无序的,而 LinkedHashMap 则比 HashMap 多了这一个功能,并且,LinkedHashMap 的有序可以按两种顺序排列,一种是按照插入的顺序,一种是按照访问的顺序(初始化 LinkedHashMap 对象时设置 accessOrder 参数为 true),而其内部是靠 建立一个双向链表 来维护这个顺序的,在每次插入……
阅读全文
2024年3月6日
HashSet 本身并没有什么特别的东西,它提供的所有集合核心功能,都是基于 HashMap 来实现的。如果了解 HashMap 源码的实现,HashSet 源码看起来跟玩一样。我的博客中有专门分析 HashMap 源码的文章,不熟悉的请自行翻阅。 HashSet 的特点如下: 内部使用 HashMap 的 key 存储元素,以此来保证元素不重复; HashSet 是无序的,因为 HashMap 的 key 是无序的; HashSet 中……
阅读全文
2024年3月6日
作为工作中最重要、最常用的容器之一,当然还是要自己动手写一篇 HashMap 的源码解析来加深对其的印象咯,而且它的设计与实现 也有很多值得学习的地方。 源码赏析 JDK1.8 的 HashMap 底层使用的是 动态数组,数组中元素存放的是 链表或红黑树。核心源码如下。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32……
阅读全文
2024年3月6日
HashMap 源码中主要了解其核心源码及实现逻辑。ConcurrentHashMap 就不再重复那些数据结构相关的内容咯,这里重点看一下它的并发安全实现。源码如下。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65……
阅读全文
2024年3月6日
一文直接带你吃透 ArrayList ArrayList 是日常开发中相当常见、面试也相当常考的一种 JDK 集合类,了解并熟悉、甚至能实现一个 ArrayList 对面试、提升自己编码功底大有益处。 一、写给小白 ArrayList 简单使用技巧 这部分是 ArrayList 的简单使用技巧,主要是介绍 ArrayList 的几个常见方法。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 /**……
阅读全文
2024年3月6日
前面我们分析了 Thread 类的源码,有了前面的铺垫,通过源码 理解 ThreadLocal 的秘密就容易多了。 ThreadLocal 类 提供了 get/set 线程局部变量的实现,ThreadLocal 成员变量与正常的成员变量不同,每个线程都可以通过 ThreadLocal 成员变量 get/set 自己的专属值。ThreadLocal 实例 通常是类中的私有静态变量,常用于将状态与线程关联,例……
阅读全文
2024年3月6日
本来想看 ThreadLocal 的源码的,但发现其中最重要的 get/set 方法都是操纵的 Thread 类 中的 threadLocals 变量 (java.lang.ThreadLocal.ThreadLocalMap),索性先来看一下 Thread 的源码吧,可以留意一下其中与 ThreadLocal 相关的属性,这样下次阅读 ThreadLocal 的核心 API 时,就能够轻易理解其原理咯。不多 BB,直接上硬菜。 实现……
阅读全文
2024年3月6日
String 的源码大家应该都能看懂,这里就不一一分析咯,重点讲一下 equals()和 hashcode()方法,然后看一下 String 类常用方法的实现,就当一起温习一下咯。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65……
阅读全文
2024年3月6日
Dubbo Remote 支持多种传输协议,其中之一就是基于 Netty 的远程通信。在 Dubbo Remote 中,基于 Netty 的远程通信是通过 NettyServer 和 NettyClient 两个实现类来完成的。 以下是 Dubbo Remote 中基于 Netty 的远程通信的工作原理: 服务提供方在启动时创建 NettyServer 对象,并绑定到指定的端口上。 服务提供方在 NettyServer 上注册服务处理器,用于处理客户端的请求。 服务消费方在调用服务时创……
阅读全文
2024年3月6日
Dubbo Remote 支持多种传输协议,其中之一就是基于 HTTP 的远程通信。在 Dubbo Remote 中,基于 HTTP 的远程通信是通过 HttpServer 和 HttpClient 两个实现类来完成的。 以下是 Dubbo Remote 中基于 HTTP 的远程通信的工作原理: 服务提供方在启动时创建 HttpServer 对象,并绑定到指定的端口上。 服务提供方在 HttpServer 上注册服务处理器,用于处理客户端的请求。 服务消费方在调用服务时创……
阅读全文