数据结构
文章平均质量分 85
学编程的MX
当你回首往事的时候,会不会因为虚度年华而悔恨?因碌碌无为而羞愧?
展开
-
Golang常用结构源码01-Map
哈希表是编程语言中必备的常见数据结构,也叫做映射、map、散列表。map实际上是一个非常简单的数据结构,其核心为hash函数、数组、拉链(或类似拉链)。map使用数组存储元素,但是不像列表一样顺序存储,而是使用hash函数获得存储key的hash值,通常经过取模运算获得最终数组index然后存储数据,这样从map中查询元素时即可通过key计算数组index,快速定位已经存储的元素。原创 2023-01-06 21:13:28 · 750 阅读 · 0 评论 -
JDK源码学习06-CurrentHashMap简析
JDK源码学习06-CurrentHashMap简析CurrentHashMap原理十分复杂,只能记录下看懂了的部分。众所周知CurrentHashMap的线程安全实现原理Synchronized+CAS,现在我们看看。静态常量其他常量类似与HashMap就不看了,这里主要看核心字段。如果元素正在扩容迁移,则桶首节点的hash值为MOVED如果元素是树 则桶首节点的hash值为TREEBINHASH_BITS为32位的int,只有第一位为0,其他二进制位都为1,可以把hash值只取尾部31位原创 2021-04-19 16:30:59 · 582 阅读 · 0 评论 -
JDK源码学习05-简单理解AQS和FairSync源码
JDK源码学习05-简单理解AQS和FairSync源码1. 简介1.1 说明ReentrantLock的实现依托于大名鼎鼎AQS实现,AQS的注释上说了,建议使用内部工具类的方式实现AQS抽象类,作为同步工具。所以ReentrantLock内部主要有NonfairSync(非公平锁)和FairSync(公平锁)两种实现方式。1.2 ReentrantLock源码简读我们可以看到ReentrantLock只不过是实现了Lock接口罢了,所以ReentrantLock必然不因为Lock接口,那是为什原创 2021-04-10 21:12:57 · 139 阅读 · 0 评论 -
JDK源码学习04-寄生虫LinkedHashMap
活久见的LinkedHashMap随便聊聊笔者大三,在2021.1.18入职字节实习生,干了四十天就休假跑路回去上课了,预计5.11接着去实习。最近一大段时间过的非常松懈,现在报复性疯狂发布博客,哈哈。还是决定阅读JDK源码,从集合开始,希望能够读完核心的集合、AQS、线程池在等部分,最近对Java并发比较感兴趣也比较有体会,鬼知道能不能坚持到那个时候。笔者的文章可能不够详细,但会记录下来个人觉得比较核心的内容。联系方式:qq 754647431LinkedHashMap简介核心原理:Link原创 2021-04-02 17:18:25 · 364 阅读 · 0 评论 -
快速排序的递归与迭代
快排的递归实现partition的几种实现第一个用首元素划分第二个用尾元素划分/*1. 使用while的partion*/int partition2(vector<int>&vec, int start, int end){ int i = start, j = end; int key = vec[start]; while (i < j) {...原创 2020-04-06 18:12:20 · 228 阅读 · 0 评论 -
栈和队列的转换上
超易理解的栈和队列栈和队列的转换上栈和队列的转换上我们通过一系列栈的压入和弹出操作来分析用两个队列模拟-一个栈的过程。如图所示,去满五年先在queue1中压入abc三个元素,只要有进队 ,必压入queue1中 弹出的时候 若queue2为空,则吧queue1中的元素依次弹出并压入queue2中 此时queue2中只要弹出元素 必是和压入顺序一致 即先进先出话不多说 ...原创 2020-04-05 09:06:48 · 148 阅读 · 0 评论