本文首发于腾讯KM,如转载请注明作者,出处。
偶然在k吧首页看到了luckyzuo的分享,因为自己一直对这方面很感兴趣,所以在工作之余对照ppt听了讲座录音,受益匪浅。这次分享提到了几种数据结构,我结合了自己的一些理解,写了这篇文章。写的时候查阅了许多资料,越发认识到自己基础知识的薄弱(还是要学习一个)。由于水平有限,若有错误,请各位指正。
目录:
一. 哈希表的弱点
1.1 hash的硬伤
1.1.1 没有通适的高效hash函数
1.1.2 容易存在冲突
1.1.3 预估容量困难,存储数据量增多导致冲突加剧,扩容的话需要对已保存元素做rehash
1.2 一些弥补:动态多阶哈希
二. 红黑树 VS skip list
2.1 介绍
2.1.1 红黑树概述
2.1.2 skip list概述
2.2 高并发友好:红黑树 || skip list?
2.2.1 什么样的数据结构才是高并发友好的?
2.2.2 链表——高并发友好的数据结构
2.2.3 红黑树——牵一发而动全身
2.3 一些缺点:红黑树 & skip list :
三.缓存友好的CP :有序数组+二分查找
3.1 使用场景
3.2 缓存命中率的那些事儿
3.2.1 缓存不命中的时间处罚
3.2.2 CPU预取与缓存命中率
3.2.3 缓存命中率:线性结构 VS 非线性结构
3.3 缓存友好的CP :有序数组+二分查找
谈到高性能,选择合理的数据结构总是必要的。这次分享中提到了这几种数据结构:①AVL树,红黑树; ③skip list(跳表) ②Hash表 ④有序数组。下面我将结合自己的理解,谈一谈这几种数据结构。
一. 哈希表的弱点
谈到快速查找,必须要提到的数据结构就是哈希表。它以理论上O(1)的时间复杂度横扫四海八荒无敌手。分享中抛出了一个经验性的结论,就是在数据量很大(百万以上)的情况下,哈希表比AVL树的查找效率更高。hash的好处我就不多说了,主要总结一下分享中提到的三处hash的硬伤:
1.1 hash的硬伤
1.1.1 没有通适的高效hash函数
对于不同