Java
java.util
Arrays
HashSet
TreeSet
Deque
ArrayDeque
ArrayList
LinkedBlockingDeque
Map
HashMap
HashTable
TreeMap
LinkedHashMap
ComputeIfAbsent 在jdk8下的死锁场景
synchronized的锁升级过程
Volatile 关键字
redis 中的Lua脚本
AQS - 从干饭角度解析
ConcurrentHashMap
本文档使用 MrDoc 发布
-
+
首页
TreeMap
## 描述 一个基于红黑树故保证有序的NavigableMap结构,其顺序默认为自然顺序(从小到大)。当然也允许在构造函数时指定Comparator排序函数。 该实现为线程不安全的,故推荐在外部进行同步 `SortedMap m = Collections.synchronizedSortedMap(new TreeMap(...));` 此实现containsKey、get、put和remove操作为log(n) 时间成本。 算法是对 Cormen、Leiserson 和 Rivest 的算法简介中的算法的改编。 因为该map实现是有序的,所以他并不遵循Map接口的一般约定。 一般map接口要求实现hashcode方法和equal方法用于hash操作和hash冲突检查,而TreeMap则额外需要提供 compareTo(或compare) 方法并与 equals 一致。即compareTo判断相等时,equals也需要判断相等(有关与 equals 一致的精确定义,请参阅Comparable或Comparator)。 由该类的任何方法返回的集合中的iterator迭代器都有快速失败性:如果在迭代器创建后的任何时间以任何方式修改了映射的结构,除了通过迭代器自己的remove方法,迭代器将抛出ConcurrentModificationException快速失败 。 jdk认为,面对并发修改时,迭代器应该快速而干净地失败,而不是冒着在未来不确定的时间出现任意、非确定性行为的风险。 ## 底层实现 ``` { // 比较器 private final Comparator<? super K> comparator; // 不是hash 不处理hash冲突 private transient Entry<K,V> root; // 节点个数 private transient int size = 0; } ``` ## 有意思的函数 ``` //返回<=key的Entry节点中最大的节点,即左边界 [ public Map.Entry<K,V> floorEntry(K key); //返回>=key的Entry节点中最小的节点,即右边界 ] public Map.Entry<K,V> ceilingEntry(K key); // 返回<key的Entry节点的最大的节点,即左边界 ( public Map.Entry<K,V> lowerEntry(K key); // 返回>key的Entry节点中最小的节点,即右边界 ) public Map.Entry<K,V> higherEntry(K key); // 返回最小的节点,即min public Map.Entry<K,V> firstEntry(); // 返回最大的节点,即max public Map.Entry<K,V> lastEntry(); // 返回并弹出最大的节点,即删除max并返回 public Map.Entry<K,V> pollFirstEntry(); // 返回并弹出最小的节点,即删除min并返回 public Map.Entry<K,V> pollLastEntry(); /* 以下函数,如果对应的Inclusive为真,则包含边界值key。 * Inclusive==true? [ :( * 默认为true时可省略 */ // 镜像翻转map public NavigableMap<K, V> descendingMap(); // 小于key的集合 public NavigableMap<K,V> headMap(K toKey, boolean inclusive); // 大于key的集合 public NavigableMap<K,V> tailMap(K fromKey, boolean inclusive); // 类似substring的集合,返回fromKey到toKey的map。 public NavigableMap<K,V> subMap(K fromKey, boolean fromInclusive, K toKey, boolean toInclusive) ```
寒烟濡雨
2022年6月11日 15:10
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
关于 MrDoc
觅思文档MrDoc
是
州的先生
开发并开源的在线文档系统,其适合作为个人和小型团队的云笔记、文档和知识库管理工具。
如果觅思文档给你或你的团队带来了帮助,欢迎对作者进行一些打赏捐助,这将有力支持作者持续投入精力更新和维护觅思文档,感谢你的捐助!
>>>捐助鸣谢列表
微信
支付宝
QQ
PayPal
Markdown文件
分享
链接
类型
密码
更新密码