![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
乱七八糟
Thxxxxxx
然鹅我不想简介自己
展开
-
大话HashMap的put,get过程
put最先判断桶的长度是否为0,为0的话则需要先对桶进行初始化操作,接着,求出hashcode并通过扰动函数确定要put到哪个桶中,若桶中没有元素直接插入,若有元素则判断key是否相等,如果相等的话,那么就将value改为我们put的value值,若不等的话,那么此时判断该点是否为树节点,如果是的话,调用putreeval方法,以树节点的方式插入,如果不是树节点,那么就遍历链表,如果找到了ke...原创 2019-06-25 20:12:42 · 1408 阅读 · 0 评论 -
大话TreeMap的put,get过程
get首先会判断在初始化TreeMap的时候是否传入了外部选择器Comparator,如果传入了,那么利用Comparator遍历整棵树,找到要存放的位置,利用Comparator的compare()方法比较树根节点p的key和传入的key,compare方法等于0说明相等,那么直接返回根节点,小于0的话p=p.left,大于0的话p=p.right。若没有找到返回null。没有传入Compa...原创 2019-06-26 16:06:58 · 285 阅读 · 0 评论 -
大话ConcurrentHashMap的put,get过程
put最最最一开始得检查桶是否进行初始化,然后确定判断所放桶中是否有元素,没有元素的话,那么就用CAS的方式添加元素,当然有可能失败,有可能其他线程已经抢占先添加,这个过程在一个死循环里,失败了再从头来一次,判断桶是否初始化,桶内是否有元素等等,如果此时桶内有元素了,那么判断桶内第一元素的hash值是否为MOVED,说明正在扩容,那么此线程就会帮助扩容,如果不是的话,那么就对一个元素synch...原创 2019-06-26 21:55:48 · 3606 阅读 · 5 评论 -
排序时间复杂度
冒泡,简单选择,直接插入, o(n方)希尔 o(n的1.5次方)快排,堆,归并 o(n log n)桶,基数,计数 o(n)原创 2019-07-02 17:09:59 · 295 阅读 · 0 评论 -
杂七杂八
JVM会把虚拟机栈和本地方法栈中正在引用的对象、静态属性引用的对象和常量,作为GC Roots。启动类加载器-》扩展类加载器-》应用加载器lib lib/ext classpathServlet规范中ServletContext是tomcat的Context实现的一个成员变量,而Spring的ApplicationCo...原创 2019-06-24 19:50:41 · 285 阅读 · 0 评论 -
大话synchronize底层原理
在每个对象中mark word中LockWord指向monitor的起始地址,也就是每个对象与一个monitor相关联。在monitor中有个Owner字段记录着拥有锁的线程。初始时为NULL表示当前没有任何线程拥有该锁,当线程成功拥有该锁后保存线程唯一标识,当锁被释放时又设置为NULL。修改过程都是以CAS的方式修改。synchronize 就有了偏向锁,偏向锁的适用场景为 没有发生锁竞争的情...原创 2019-08-09 15:49:56 · 616 阅读 · 0 评论