数据结构
文章平均质量分 62
diaoxiadezidan
这个作者很懒,什么都没留下…
展开
-
跳跃表
闲聊 看了redis zset后,突然想写一篇跳跃表的文章。 说一说跳跃表,其实跳跃表的思想有点像二分法的思想,为什么不直接用二分呢,因为跳跃表一般处理的是链表而不是数组。如果是数组的话,只要维持有序,查的时候直接二分就行。二跳跃表要面对的一般是链表,链表不像数组内存地址连续,可以直接访问到想要的地方,链表的访问通常来讲是从头部开始遍历,或者尾部开始遍历。如果每找一个值都要一个一个查的话效率实在是太低,在面对大量的数据时有些力不从心。而跳跃表可以解决这个问题,虽说hashmap也可以解决这个问题,但是h原创 2021-02-09 15:50:12 · 351 阅读 · 0 评论 -
阻塞队列源码分析
闲聊 阻塞队列有很多,比如ArrayBlockingQueue,LinkedBlockingQueue等。他们原理上都差不多区别只在于存储上,这里只以ArrayBlockingQueue来做源码分析。 看源码之前我以为很高端,看了之后。。。你懂的。。。这篇的篇幅明显比之前的线程池要短得多。 正文 入队操作 作为看源码的入口,就以offer方法来进行分析,虽然也有add,但是offer明显要常用的多,如果去看其他的源码的话,也能明显感到offer用的要多一些,毕竟可以知道插入是否成功,是不是要自旋插原创 2021-02-08 15:44:26 · 94 阅读 · 0 评论 -
线程池参数和相关原理
本篇文章会拿ThreadPoolExecutor来进行源码分析。 1.闲聊 线程池,顾名思义,线程的池子。说到池子我们可以联想到很多东西,数据库连接池,线程池等等。 他们有什么共同点呢? 池化,也就是我们希望通过一个池化的方式来对连接进行把控。我们不希望同一时间连接过多,导致线程过多,占用资源过大。 这种感觉有点像JVM,我们不希望我们因为一些琐事而增加我们的开发成本。 2.正题 进入正题,创建线程池有如下这么多的参数,如果直接说的话不方便理解,我们就直接从execute进入,毕竟这个方法是最原创 2021-02-07 16:45:41 · 88 阅读 · 0 评论 -
ArrayList源码分析
介绍 ArrayList一个动态数组,通过名字可以大致理解出 这是个数组,并且通过某种方式可以进行动态扩容。 作为一个数组,它一定拥有数组的最基本功能,add set get。 作为源码分析,我们就从最基本的add开始进入,看看底层是如何实现的。 属性 /** * Default initial capacity. */ private static final int DEFAULT_CAPACITY = 10; /** * Shared em.原创 2021-01-26 17:10:11 · 72 阅读 · 0 评论