<meta name="source" content="lake">
数组 链表 跳表 基础
-
数组:一段连续的内存空间,增删时间复杂度O(n),查找 O(1),每次增删会移动index后的所有元素
-
Java中ArrayList 增删会使用系统的System.arrayCopy 移动源和目标位置,如 统一向后移动1
-
链表:非连续 非顺序的存储结构,通过指针链接,查找时间复杂度O(n),增删O(1)
-
lookup 需要按照顺序依次 next 查找
-
跳表(skip-list):链表的查找慢,为了加快速度,将链表升维,以空间换时间,增加多级索引,如下图,查找的时间复杂度是O(logn),但是当数据有改变时需要更新索引,维护成本高。redis的底层使用的是跳表。
-
redis底层使用跳表不用红黑树的原因是因为 时间复杂度一样,但红黑树有平衡操作会浪费更多的性能,redis更关注局部
![](https://img.haomeiwen.com/i2283765/15b57537b79dc873.png)
网友评论