2021-12-04发表 zhaommmmomo Code / 实现 / 数据结构7 分钟读完 (大约1003个字)SkipList原理及实现重点randLevel算法 12345678910111213141516/** * Redis实现 * 初始层数为1,每次随机生成一个随机数,取低16位 * 当取的这个值小于0.25倍的0xFFFF时,level++,否则退出。 * 返回level和maxLevel的最小值 * * 这里的ZSKIPLIST_P是晋升的概率。对应的期望层高是E=1/(1-p)。 */#define ZSKIPLIST_MAXLEVEL 64#define ZSKIPLIST_P 0.25private int randLevel() { int level = 1; while ((random() & 0xFFFF) < (ZSKIPLIST_P * 0xFFFF)) level += 1; return (level < ZSKIPLIST_MAXLEVEL) ? level : ZSKIPLIST_MAXLEVEL;}阅读更多