zoukankan      html  css  js  c++  java
  • java-->TreeMap的使用

    0- 继承结构

    1- 简介

    • TreeMap的底层实现原理

    基于红黑树实现的排序Map

    • TreeMap增删改查的时间复杂度

    TreeMap的增删改查和统计相关的操作的时间复杂度都为 O(logn)

    • TreeMap的key和value的要求
    1. 由于实现了Map接口,则key的值不允许重复(重复则覆盖),也不允许为null,按照key的自然顺序排序或者Comparator接口指定的排序方法进行排序。
    1. value允许重复,也允许为null,当key重复时,会覆盖此value值。

    2- TreeMap的使用场景

    考虑如下场景:

    • 需要基于排序的统计功能:

    由于TreeMap是基于红黑树的实现的排序Map,对于增删改查以及统计的时间复杂度都控制在O(logn)的级别上,相对于HashMap和LikedHashMap的统计操作的(最大的key,最小的key,大于某一个key的所有Entry等等)时间复杂度O(n)具有较高时间效率。

    • 需要快速增删改查的存储功能:

    相对于HashMap和LikedHashMap 这些 hash表的时间复杂度O(1)(不考虑冲突情况),TreeMap的增删改查的时间复杂度为O(logn)就显得效率较低。

    • 需要快速增删改查而且需要保证遍历和插入顺序一致的存储功能:

    相对于HashMap和LikedHashMap 这些 hash表的时间复杂度O(1)(不考虑冲突情况),TreeMap的增删改查的时间复杂度为O(logn)就显得效率较低。但是HashMap并不保证任何顺序性。LikedHashMap额外保证了Map的遍历顺序与put顺序一致的有序性。

    综上:场景1适合使用TreeMap,场景2适合使用HashMap,场景3适合使用LikedHashMap,需要注意它们都是非线程安全的,当在并发场景下可以使用其他并发集合或者调用者在调用层去控制并发使得操作串行执行。

    • 构造方法摘要

      构造方法
      Constructor and Description
      TreeMap()
      使用其键的自然排序构造一个新的空树状图。
      TreeMap(Comparator<? super K> comparator)
      构造一个新的,空的树图,按照给定的比较器排序。
      TreeMap(Map<? extends K,? extends V> m)
      构造一个新的树状图,其中包含与给定地图相同的映射,根据其键的 自然顺序进行排序 。
      TreeMap(SortedMap<K,? extends V> m)
      构造一个包含相同映射并使用与指定排序映射相同顺序的新树映射。
    • 方法摘要

      所有方法接口方法具体的方法
      Modifier and TypeMethod and Description
      Map.Entry<K,V> ceilingEntry(K key)
      返回与大于或等于给定键的最小键相关联的键值映射,如果没有此键,则 null 。
      K ceilingKey(K key)
      返回大于或等于给定键的 null键,如果没有此键,则返回 null 。
      void clear()
      从这张地图中删除所有的映射。
      Object clone()
      返回此 TreeMap实例的浅拷贝。
      Comparator<? super K> comparator()
      返回用于订购此地图中的键的比较器,或null如果此地图使用其键的natural ordering 。
      boolean containsKey(Object key)
      如果此映射包含指定键的映射,则返回 true 。
      boolean containsValue(Object value)
      如果此地图将一个或多个键映射到指定值,则返回 true 。
      NavigableSet<K> descendingKeySet()
      返回此地图中包含的键的相反顺序NavigableSet 。
      NavigableMap<K,V> descendingMap()
      返回此映射中包含的映射的反向排序视图。
      Set<Map.Entry<K,V>> entrySet()
      返回此地图中包含的映射的Set视图。
      Map.Entry<K,V> firstEntry()
      返回与该地图中的最小键相关联的键值映射,如果地图为空,则返回 null 。
      K firstKey()
      返回此地图中当前的第一个(最低)键。
      Map.Entry<K,V> floorEntry(K key)
      返回与小于或等于给定键的最大键相关联的键值映射,如果没有此键,则 null 。
      K floorKey(K key)
      返回小于或等于给定键的最大键,如果没有这样的键,则返回 null 。
      void forEach(BiConsumer<? super K,? super V> action)
      对此映射中的每个条目执行给定的操作,直到所有条目都被处理或操作引发异常。
      V get(Object key)
      返回到指定键所映射的值,或 null如果此映射包含该键的映射。
      SortedMap<K,V> headMap(K toKey)
      返回此地图部分的视图,其密钥严格小于 toKey 。
      NavigableMap<K,V> headMap(K toKey, boolean inclusive)
      返回此地图部分的视图,其键值小于(或等于,如果 inclusive为真) toKey 。
      Map.Entry<K,V> higherEntry(K key)
      返回与最小密钥相关联的密钥值映射严格大于给定密钥,如果没有这样的密钥则 null 。
      K higherKey(K key)
      返回严格大于给定键的最小键,如果没有这样的键,则返回 null 。
      Set<K> keySet()
      返回此地图中包含的键的Set视图。
      Map.Entry<K,V> lastEntry()
      返回与该地图中最大关键字关联的键值映射,如果地图为空,则返回 null 。
      K lastKey()
      返回当前在此地图中的最后(最高)键。
      Map.Entry<K,V> lowerEntry(K key)
      返回与最大密钥相关联的密钥值映射严格小于给定密钥,如果没有这样的密钥,则 null 。
      K lowerKey(K key)
      返回严格小于给定键的最大键,如果没有这样的键,则返回 null 。
      NavigableSet<K> navigableKeySet()
      返回此地图中包含的键的NavigableSet视图。
      Map.Entry<K,V> pollFirstEntry()
      删除并返回与该地图中的最小键相关联的键值映射,如果地图为空,则返回 null 。
      Map.Entry<K,V> pollLastEntry()
      删除并返回与该地图中最大密钥相关联的键值映射,如果地图为空,则返回 null 。
      V put(K key, V value)
      将指定的值与此映射中的指定键相关联。
      void putAll(Map<? extends K,? extends V> map)
      将指定地图的所有映射复制到此地图。
      V remove(Object key)
      从此TreeMap中删除此键的映射(如果存在)。
      V replace(K key, V value)
      只有当目标映射到某个值时,才能替换指定键的条目。
      boolean replace(K key, V oldValue, V newValue)
      仅当当前映射到指定的值时,才能替换指定键的条目。
      void replaceAll(BiFunction<? super K,? super V,? extends V> function)
      将每个条目的值替换为对该条目调用给定函数的结果,直到所有条目都被处理或该函数抛出异常。
      int size()
      返回此地图中键值映射的数量。
      NavigableMap<K,V> subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive)
      返回此地图部分的视图,其关键范围为 fromKey至 toKey 。(boolean true代表包含,false代表不包含)
      SortedMap<K,V> subMap(K fromKey, K toKey)
      返回此地图部分的视图,其关键字范围从 fromKey (含)到 toKey ,独占。
      SortedMap<K,V> tailMap(K fromKey)
      返回此地图部分的视图,其键大于等于 fromKey 。
      NavigableMap<K,V> tailMap(K fromKey, boolean inclusive)
      返回此地图部分的视图,其键大于(或等于,如果 inclusive为真) fromKey 。
      Collection<V> values()
      返回此地图中包含的值的Collection视图。
  • 相关阅读:
    ORACLE中order by造成分页不正确原因分析
    各种数据库分页语句整理以及Oracle数据库中的ROWNUM和ORDER BY的区别
    Spring配置文件一直报错的根源所在
    java加密用到了BASE64Decoder时报错信息:Access restriction: The type BASE64Encoder is not accessible due to restrict
    Eclipse报错:An internal error occurred during: "Building workspace". Java heap space),卡死解决办法
    云数据库场景问题经典案例——分页优化
    DDL失败案例
    Java笔试题解答
    模拟购物车表格
    addTodo 模型
  • 原文地址:https://www.cnblogs.com/cai170221/p/13740611.html
Copyright © 2011-2022 走看看