哈希表(Hash)
哈希表查询数据的时间复杂度为O(1),是一种高效的数据结构。面试中常问的HashMap就是基于哈希表的思想,对HashMap不太深入的同学,可以参考我的另外一篇文章HashMap夺命连环问
例如将索引列作为key,对应行的物理地址作为value,非常适用于处理等值查询。
select * from user where id=1;
但哈希表显而易见的缺点就是,哈希表不适用于范围查找。
例如执行以下语句时,哈希表就无能为力了。
select * from user where id>1;
二叉搜索树(Binary Search Tree)
经常刷LeetCode的同学,肯定是知道二叉搜索树的中序遍历是一个递增序列。
一颗二叉搜索树,每个节点最多只有2个子节点,左子节点的值小于父节点,右子节点的值大于父节点。
在java培训中二叉搜索树中进行查询,可以利用到二分查找,因此查询的时间复杂度为O(logN)。
例如查找元素23时,先从根节点开始,因为23>20,路由到右子节点32上。因为23<32,路由到其左子节点23上,发现相等,查询结束。
仅需比较3次,就可以查询到想要的数据。
另外,二叉搜索树的插入与删除操作的时间复杂度也为O(logN),有兴趣的同学可以做做LeetCode上的这道题701. 二叉搜索树中的插入操作
<