替罪羊树 洛谷 P3369 【模板】普通平衡树

缘起

平衡二叉树是为了解决二叉树退化为链表导致O(n) 查询复杂度而诞生的数据结构. 现在有一款平衡二叉树比较暴力,就是所谓的替罪羊树(scapegoat tree, 下面简称SGT)(虽然其实我觉得这个名字叫的觉得不是很贴切,但是市面上都这么叫它).

SGT最大的特点就是一旦失衡,就暴力重建,检查是否失衡就是在插入和删除节点的时候. 其他的和典型的BST没什么两样. 本文以 洛谷 P3369 【模板】普通平衡树 为板子,讲解一下这种数据结构。

Read More

WeakHashMap 源码解读

缘起

【1】中我们介绍了弱引用的一种应用场景——ThreadLocal. 当时是为了解决内存泄漏问题而必须要使得ThreadLocalMap的key(ThreadLocal类型)是弱引用. 但是带来的问题就是ThreadLocalMap的value的内存泄漏问题. 解决办法就是在get、set的时候顺便清理一下key已经为null的Entry. 而本文介绍弱引用另一种应用场景——WeakHashMap. 它的key同样是弱引用. 对弱引用不清楚的同学可以参考【2】

Read More