第12章. 映射(Map)
映射(Map)
Map在有些变成语言中也叫作字典(比如在Python中)
Map的每一个Key是唯一的,Value可以不是唯一的
Map中的每一个Key对应一个Value
一、Map的接口设计
public interface Map<K, V> {
int size;
boolean isEmpty();
void clear();
V put(K key, V value);
V get(K key);
boolean containsKey(K key);
boolean containsValue(V value);
void traversal(Visitor<K, V> visitor);
public static abstract class Visitor<K, V> {
boolean stop;
public abstract boolean visit(K key, V value);
}
}
类似Set,Map可以直接利用之前学习的链表、二叉搜素树(AVL树、红黑树)等数据结构来实现。
二、直接由红黑树(RBTree)实现TreeMap
红黑树节点上存放的是K和V,即一个节点上既有key又有value。
通过RBTree
实现的TreeMap- 时间复杂度(平均)
- 添加、删除、搜素:O(logn)
- 特点:
- Key必须具备可比较性
- 元素的分布是有顺序的
- 在实际应用中,很多时候的需求
- Map中存储的元素不需要讲究顺序
- Map中的Key不需要具备可比较性
- 不考虑顺序、不考虑Key的可比较性,Map有更好的实现方案,平均时间复杂度可以达到O(1)
- 那就是采取
哈希表
来实现Map
三、哈希表实现HashMap
HashMap底层通过哈希表来实现
四、LinkedHashMap
在HashMap的基础上维护元素的添加顺序,使得遍历的结果遵从添加顺序。(不要求从小到大,只是要求遍历按照元素添加的顺序)。
五、总结
- 对遍历没有要求,是无序遍历的,就使用HashMap(底层是哈希表+红黑树,默认是根据桶的顺序遍历的)
- 要求key遍历顺序是从小到大的,就使用TreeMap(底层是红黑树)
- 要求遍历顺序是按照添加顺序的,就使用LinkedHashMap
本文作者:Ac_c0mpany丶
本文链接:https://www.cnblogs.com/keyongkang/p/17880515.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步