B树和TreeSet与TreeMap

1. 此前二叉搜索树相关的内容我们均假设可以把整个数据结构存储在计算机的内存中,但是如果数据量过大时,必须把数据结构放在磁盘上,导致大O模型不在适用。目前计算机处理器每秒至少可以执行5亿条指令,磁盘访问一次需要大概10ms,1s可访问100次左右;这就意味着一次磁盘访问相当于执行50万条指令。所以导致运行时间增长的主要就是因为磁盘访问次数,我们愿意为减少磁盘访问进行大量的计算。但是典型的二叉搜索树的高度为log2(N),查询一个数据就要进行log2(N)次比较,这无疑导致磁盘访问次数比较大,运行时间较长,所以针对数据持久化在磁盘上这一情形,出现了B树这一数据结构,从而减少磁盘访问次数。
 
2.阶为M的B树具有如下特性:
(1)数据项存储在树叶上;
(2)非叶节点存储直到M-1个关键字以指示搜索方向;关键字i代表子树i+1中的最小的关键字;
(3)树的根或者是树叶或者其儿子数在2到M之间;
(4)除根外,所有非叶结点的儿子数在[M/2]和M之间;
(5)所有的树叶都在相同的深度上并有[L/2]到L个数据项
 
3.TreeSet和TreeMap
TreeSet 不允许重复元素,各项有序,TreeMap关键字唯一,值不唯一,可以为null,不提供迭代器,因此要迭代需可以用三个方法(1)Set<KeyType> keySet()  (2)Collection<ValueType> values()  (3)Set<Map.Entry<keyType,ValuesType>> entrySet()
这两种数据结构均采用平衡二叉树来实现的。(自顶向下的红黑树)
 
HashMap 的映射方式采用hash函数,能够比TreeMap(支持按关键字排序)更快的映射到值,所以比TreeMap更快,但是不保证关键字的排序。
 
posted @ 2018-03-04 09:31  JetHu  阅读(281)  评论(0编辑  收藏  举报