多线程环境下Java提供的一些简单容器都无法使用了要用到JUC中的大部分容器,由于ConcurrentHashMap是高频考点用到也比较多因此着重写了下,其余的容器就先Mark下。奥利给
跳表
简而言之跳表就是多层链表的结合体,跳表分为许多层(level),每一层都可以看作是数据的索引,这些索引的意义就是加快跳表查找数据速度。每一层的数据都是有序的,上一层数据是下一层数据的子集,并且第一层(level 1)包含了全部的数据;层次越高,跳跃性越大,包含的数据越少。并且随便插入一个数据该数据是否会是跳表索引完全随机的跟玩骰子一样,redis中的zset
底层就是跳表数据结构。并且跳表的速度几乎接近红黑树了。
跳表包含一个表头,它查找数据时,是从上往下,从左往右
进行查找。现在“需要找出值为37的节点”为例,来对比说明跳表和普遍的链表。
- 没有跳表查询
比如我查询数据37,如果没有上面的索引时候路线如下图: