3 查找
3.1 符号表
定义:符号表是一种存储键值对的数据结构:支持两种操作:插入(put),即将一组新的键值对存入表中;查找(get),即根据给定的键得到相应的值.
3.1.1 一些规定:
- 重复键:每个键只对应一个值,若新存入键值对和已有键冲突则新值会更新旧值
- 空(null)键:键(key)不能为空
- 空值:值(value)不允许为空
- 删除操作:
延时删除
:将键对应值置空,然后一并删除空值键.put(key,null)可作为delete(key)的延时实现;即时删除
:即delete()
3.1.2 有序符号表
API
public class ST<Key extends Comparable<Key>, Value>
方法 | 注释 |
---|---|
ST() | 创建符号表 |
void put(Key key, Value val) | 存入键值对 |
Value get(Key key) | 获取键key的对应值 |
void delete(Key key) | 删去键值对key |
boolean contains(Key key) | 判断键是否存在 |
boolean isEmpty() | 表是否为空 |
int size() | 表中键值对数量 |
Key min() | 最小的键 |
Key max() | 最大的键 |
Key floor(Key key) | 小于等于key的最大键 |
Key ceiling(Key key) | 大于等于key的最小键 |
int rank(Key key) | 小于key的键个数 |
Key select(int k) | 排名为k的键 |
- 排名(rank):找出小于指定键的键数;选择(select)找出排名为k的键,即表中比该键小的键数为k.对于0到size()-1的所有i都有
i == rank(select(i))
且所有键都满足key = select(rank(key))