搜索相关
一、搜索
1.什么是搜索?
从一个数据集合中,找出特定的一个或多个数据的过程
2.搜索场景面临的问题是什么?
- 尽可能快的查到结果
- 数据集合需要适应变化(数据集合中的数据可能实时变化着)
3.搜索中存在的模型;
- 纯Key模型,只需要判断一个Key在不在这个集合中———Set
- Key—Value模型,每个唯一的Key都关联着一个Value——Map
4.设计专门的数据结构 OR 算法来解决搜索问题(查找)问题
分情况:
- 如果数据集不变(或者变化情况很少)
最常见的算法:二分算法——条件(数据中key是有序的)
查找:O(log(n))
插入:O(n)
删除:O(n) - 更常见的情况是,我们不但要追求查找效率,也要追求 插入/删除效率。在这个追求中间取一个中庸值
更多的两种数据结构:哈希表、平衡搜索树
二、HashMap/HashSet和它们背后的哈希表
1.哈希表背后的机制?
利用了现代内存的随机访问是O(1)这一特性——数组根据下标访问是O(1)的
把一个大数据集查找的问题转化为多个小数据集的查找问题
2.
3.遇到冲突的解决办法
- 开放地址法
- 链地址法
三、
1.
2.
3.
4.
5.
6.
7.
8.==和equals和hashCode的区别
- ==是运算符,用于比较两个变量是否相等。
- equals,是Objec类的方法,用于比较两个对象是否相等,默认Object类的equals方法是比较两个对象的地址,跟==的结果一样。
- hashCode也是Object类的一个方法。返回一个离散的int型整数。在集合类操作中使用,为了提高查询速度。(HashMap,HashSet等)
9.
10.