知识体系
数组
因为计算机的内存是有限的,故数组的长度也是有限的,实际应用当中的数据往往十分庞大;但是无序数组的查找最坏的情况需要遍历整个数组,于是就有了后来的二分查找法,不过任何一种数组无法解决的问题就是插入、删除操作比较复杂,因此数组不会被优先考虑。
普通链表
普通链表由于它的结构特点被证明根本不适合进行查找
哈希表
哈希表是数组和链表的折中,同时它的设计依赖散列函数的设计,数组不能无限长、链表也不适合查找,所以也不适合大规模的查找
二叉查找树
因为可能退化成链表,同样不适合进行查找
AVL树
是为了解决可能退化成链表问题,但是AVL树的旋转过程非常麻烦,因此插入和删除很慢,也就是构建AVL树比较麻烦
红黑树
是平衡二叉树和AVL树的折中,因此是比较合适的。集合类中的Map、关联数组具有较高的查询效率,它们的底层实现就是红黑树。
多路查找树
是大规模数据存储中,实现索引查询这样一个实际背景下,树节点存储的元素数量是有限的(如果元素数量非常多的话,查找就退化成节点内部的线性查找了),这样导致二叉查找树结构由于树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下。
B树
与自平衡二叉查找树不同,B树适用于读写相对大的数据块的存储系统,例如磁盘。它的应用是文件系统及部分非关系型数据库索引