持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情
基本介绍
Java里面叫做TreeSet或者TreeMap(看有没有value)
这里的有序表的有序指的是内部是根据Key有序组织数据的,所有的key之间存在一种组织排序方式,是有序组织Key。
所以有序表可以实现所有哈希表的功能,并且基于有序Key可以支持更多功能,例如查找最小/大,最接近某个value的key等:
有序表具体实现原理后面才会讲,基于AVL数,红黑树等等。
有序表的增删改查时间复杂度略高一点,为O(logN)级别,但是也是很优秀了,如果有需要可以使用
有序表的固定操作:
- void put(K key, V value): 将一个(key,value)记录加入到表中
- void get(K key): 根据给定的key,查询value并返回
- void remove(K key): 移除key的记录
- boolean containersKey(K key): 询问是否有关于key的记录
- K firstKey(): 返回所有键值的排序结果中,最左的那个
- K lastKey(): 返回所有键值的排序结果中,最右的那个中
- K floorKey(K key): 如果表中存入过key,返回key;否则返回所有键值的排序结果中key的前一个
- K ceilingKey(K key): 如果表中存入过key,返回key;否则返回所有键值的排序结果中key的后一个
以上所有操作时间复杂度都是O(logN),N为有序表含有的记录数
比较器
基础类型值不需要提供比较器也可以支持。
但是如果是类例如上面的Node类型,你必须提供比较器实例才能正常运行,否则会报错:
需要自己实现对应的比较器: