49天精通Java,第25天,Java映射Map、弱散列映射WeakHashMap-LMLPHP

大家好,我是哪吒。

一、Java映射Map

Java类库为映射提供了两个通用的实现:HashMap和TreeMap,这两个类都实现了Map接口。

散列映射对键进行散列,数映射根据键的顺序将它们组织为一个搜索树。散列和比较函数只应用于键,值不做散列和比较处理。

那么,应该选择散列映射还是散列树呢?HashMap还是TreeMap?

如果不需要按照有序顺序访问键,最好选择散列映射HashMap。

二、HashMap常用方法

HashMap是Java中常用的键值对集合实现类之一。

49天精通Java,第25天,Java映射Map、弱散列映射WeakHashMap-LMLPHP

  1. put(K key, V value):将指定的键值对存储到HashMap中;
  2. get(Object key):获取指定键所对应的值,如果不存在则返回null;
  3. remove(Object key):移除指定键所对应的键值对;
  4. clear():清空HashMap中所有的键值对;
  5. size():返回HashMap中键值对的数量;
  6. containsKey(Object key):判断HashMap是否包含指定的键;
  7. containsValue(Object value):判断HashMap是否包含指定的值;
  8. keySet():返回HashMap中所有键的集合;
  9. values():返回HashMap中所有值的集合;
  10. entrySet():返回HashMap中所有键值对的集合;

三、TreeMap常用方法

TreeMap是一种基于红黑树实现的有序映射。

49天精通Java,第25天,Java映射Map、弱散列映射WeakHashMap-LMLPHP

  1. entrySet():返回一个Set集合,包含了Map中所有的元素;
  2. entrySet(boolean onlyIfAbsent):返回一个Set集合,包含了Map中所有的元素,但是如果元素不存在则返回空Set;
  3. entrySet(Set<? extends K> keySet, boolean onlyIfAbsent):返回一个Set集合,包含了Map中所有的元素,但是如果元素不存在则返回空Set;
  4. entrySet(K key, boolean onlyIfAbsent):返回一个Set集合,包含了Map中所有的元素,但是如果元素不存在则返回空Set;
  5. entrySet(K key, int hash, boolean onlyIfAbsent):返回一个Set集合,包含了Map中所有的元素,但是如果元素不存在则返回空Set;
  6. entrySet(K key, int hash, boolean onlyIfAbsent, Set<? extends V> valueSet):返回一个Set集合,包含了Map中所有的元素,但是如果元素不存在则返回空Set;
  7. entrySet(K key, int hash, boolean onlyIfAbsent, Set<? extends V> valueSet, Set<? extends V> value2Set):返回一个Set集合,包含了Map中所有的元素,但是如果元素不存在则返回空Set;
  8. 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中的元素。

  1. keySet():返回包含Map中所有键的Set;
  2. values():返回包含Map中所有值的Collection;
  3. entrySet():返回包含Map中所有键值对的Set;

通过这些映射视图,可以方便地遍历Map中的元素、检查某个键是否存在、删除指定键等操作。

在使用时需要注意,映射视图只是一个视图,即对原Map进行的修改会反映到相应的映射视图中,反之亦然,因此要谨慎使用。

另外,由于映射视图是基于Map实现的,因此对映射视图的修改也可能影响到原Map中的元素。

五、弱散列映射WeakHashMap

Java中的弱散列映射指的是一种特殊的Map实现,即WeakHashMap类。和普通HashMap不同,WeakHashMap中的键是弱引用,即当某个键不再被外部对象引用时,该键及其对应的值会被自动清除掉,以避免内存泄漏问题。

通过使用WeakHashMap,可以将某些对象与其他应用逻辑分离开来,使得它们的生命周期仅由其它对象的引用决定,当没有任何对象引用时,这些对象会被自动清除,从而释放系统资源。在Java中,常用WeakHashMap来实现缓存、事件通知等场景。需要注意的是,由于弱引用的存在,WeakHashMap无法保证元素的顺序,因此在遍历时应该谨慎。

WeakHashMap是一种基于红黑树实现的有序映射,它的常用方法包括:

  1. put(K key, V value):将一个键值对添加到弱散列映射中;
  2. get(K key):返回一个键值对,如果键不存在则返回null;
  3. remove(K key):从弱散列映射中删除一个键值对;
  4. containsKey(K key):检查一个键是否存在于弱散列映射中;
  5. size():返回弱散列映射中键值对的数量;

这些方法都是基于红黑树实现的,因此它们的时间复杂度都是O(log n),其中n是Map中元素的数量。

49天精通Java,第25天,Java映射Map、弱散列映射WeakHashMap-LMLPHP

🏆本文收录于,Java基础教程系列

目前已经700+订阅,CSDN最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。

🏆哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师

04-08 06:52