大家好,我是哪吒。
一、Java映射Map
Java类库为映射提供了两个通用的实现:HashMap和TreeMap,这两个类都实现了Map接口。
散列映射对键进行散列,数映射根据键的顺序将它们组织为一个搜索树。散列和比较函数只应用于键,值不做散列和比较处理。
那么,应该选择散列映射还是散列树呢?HashMap还是TreeMap?
如果不需要按照有序顺序访问键,最好选择散列映射HashMap。
二、HashMap常用方法
HashMap是Java中常用的键值对集合实现类之一。
- put(K key, V value):将指定的键值对存储到HashMap中;
- get(Object key):获取指定键所对应的值,如果不存在则返回null;
- remove(Object key):移除指定键所对应的键值对;
- clear():清空HashMap中所有的键值对;
- size():返回HashMap中键值对的数量;
- containsKey(Object key):判断HashMap是否包含指定的键;
- containsValue(Object value):判断HashMap是否包含指定的值;
- keySet():返回HashMap中所有键的集合;
- values():返回HashMap中所有值的集合;
- entrySet():返回HashMap中所有键值对的集合;
三、TreeMap常用方法
TreeMap是一种基于红黑树实现的有序映射。
- entrySet():返回一个Set集合,包含了Map中所有的元素;
- entrySet(boolean onlyIfAbsent):返回一个Set集合,包含了Map中所有的元素,但是如果元素不存在则返回空Set;
- entrySet(Set<? extends K> keySet, boolean onlyIfAbsent):返回一个Set集合,包含了Map中所有的元素,但是如果元素不存在则返回空Set;
- entrySet(K key, boolean onlyIfAbsent):返回一个Set集合,包含了Map中所有的元素,但是如果元素不存在则返回空Set;
- entrySet(K key, int hash, boolean onlyIfAbsent):返回一个Set集合,包含了Map中所有的元素,但是如果元素不存在则返回空Set;
- entrySet(K key, int hash, boolean onlyIfAbsent, Set<? extends V> valueSet):返回一个Set集合,包含了Map中所有的元素,但是如果元素不存在则返回空Set;
- entrySet(K key, int hash, boolean onlyIfAbsent, Set<? extends V> valueSet, Set<? extends V> value2Set):返回一个Set集合,包含了Map中所有的元素,但是如果元素不存在则返回空Set;
- entrySet(K key, int hash, boolean onlyIfAbsent, Set<? extends V> valueSet, Set<? extends V> value2Set, Set<? extends V> value3Set):返回一个Set集合,包含了Map中所有的元素,但是如果元素不存在则返回空Set;
这些方法都是基于红黑树实现的,因此它们的时间复杂度都是O(log n)。
四、映射视图
Java中的映射视图是指一种将Map转换为Set或Collection的机制,以便于更方便地操作Map中的元素。
- keySet():返回包含Map中所有键的Set;
- values():返回包含Map中所有值的Collection;
- entrySet():返回包含Map中所有键值对的Set;
通过这些映射视图,可以方便地遍历Map中的元素、检查某个键是否存在、删除指定键等操作。
在使用时需要注意,映射视图只是一个视图,即对原Map进行的修改会反映到相应的映射视图中,反之亦然,因此要谨慎使用。
另外,由于映射视图是基于Map实现的,因此对映射视图的修改也可能影响到原Map中的元素。
五、弱散列映射WeakHashMap
Java中的弱散列映射指的是一种特殊的Map实现,即WeakHashMap类。和普通HashMap不同,WeakHashMap中的键是弱引用,即当某个键不再被外部对象引用时,该键及其对应的值会被自动清除掉,以避免内存泄漏问题。
通过使用WeakHashMap,可以将某些对象与其他应用逻辑分离开来,使得它们的生命周期仅由其它对象的引用决定,当没有任何对象引用时,这些对象会被自动清除,从而释放系统资源。在Java中,常用WeakHashMap来实现缓存、事件通知等场景。需要注意的是,由于弱引用的存在,WeakHashMap无法保证元素的顺序,因此在遍历时应该谨慎。
WeakHashMap是一种基于红黑树实现的有序映射,它的常用方法包括:
- put(K key, V value):将一个键值对添加到弱散列映射中;
- get(K key):返回一个键值对,如果键不存在则返回null;
- remove(K key):从弱散列映射中删除一个键值对;
- containsKey(K key):检查一个键是否存在于弱散列映射中;
- size():返回弱散列映射中键值对的数量;
这些方法都是基于红黑树实现的,因此它们的时间复杂度都是O(log n),其中n是Map中元素的数量。
🏆本文收录于,Java基础教程系列。
目前已经700+订阅,CSDN最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。
🏆哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师。