A Red-Black tree based {@link NavigableMap} implementation.
The map is sorted according to the {@linkplain Comparable natural
ordering} of its keys, or by a {@link Comparator} provided at map
creation time, depending on which constructor is used.

TreeMap 是红黑二叉树。TreeSet 是红黑二叉树,不过他的元素是只有一个Key,而TreeMap key 用来排序,Value 是map 对应的值。

TreeMap 是基于红黑二叉树实现的,而HashMap 是基于数组加链表。

java.util.TreeMap#fixAfterInsertion

    /** From CLR */private void fixAfterInsertion(TreeMapEntry<K,V> x) {x.color = RED;while (x != null && x != root && x.parent.color == RED) {if (parentOf(x) == leftOf(parentOf(parentOf(x)))) {TreeMapEntry<K,V> y = rightOf(parentOf(parentOf(x)));if (colorOf(y) == RED) {setColor(parentOf(x), BLACK);setColor(y, BLACK);setColor(parentOf(parentOf(x)), RED);x = parentOf(parentOf(x));} else {if (x == rightOf(parentOf(x))) {x = parentOf(x);rotateLeft(x);}setColor(parentOf(x), BLACK);setColor(parentOf(parentOf(x)), RED);rotateRight(parentOf(parentOf(x)));}} else {TreeMapEntry<K,V> y = leftOf(parentOf(parentOf(x)));if (colorOf(y) == RED) {setColor(parentOf(x), BLACK);setColor(y, BLACK);setColor(parentOf(parentOf(x)), RED);x = parentOf(parentOf(x));} else {if (x == leftOf(parentOf(x))) {x = parentOf(x);rotateRight(x);}setColor(parentOf(x), BLACK);setColor(parentOf(parentOf(x)), RED);rotateLeft(parentOf(parentOf(x)));}}}root.color = BLACK;}

左旋、右旋、

java.util.TreeMap#fixAfterDeletion

    /** From CLR */private void fixAfterDeletion(TreeMapEntry<K,V> x) {while (x != root && colorOf(x) == BLACK) {if (x == leftOf(parentOf(x))) {TreeMapEntry<K,V> sib = rightOf(parentOf(x));if (colorOf(sib) == RED) {setColor(sib, BLACK);setColor(parentOf(x), RED);rotateLeft(parentOf(x));sib = rightOf(parentOf(x));}if (colorOf(leftOf(sib))  == BLACK &&colorOf(rightOf(sib)) == BLACK) {setColor(sib, RED);x = parentOf(x);} else {if (colorOf(rightOf(sib)) == BLACK) {setColor(leftOf(sib), BLACK);setColor(sib, RED);rotateRight(sib);sib = rightOf(parentOf(x));}setColor(sib, colorOf(parentOf(x)));setColor(parentOf(x), BLACK);setColor(rightOf(sib), BLACK);rotateLeft(parentOf(x));x = root;}} else { // symmetricTreeMapEntry<K,V> sib = leftOf(parentOf(x));if (colorOf(sib) == RED) {setColor(sib, BLACK);setColor(parentOf(x), RED);rotateRight(parentOf(x));sib = leftOf(parentOf(x));}if (colorOf(rightOf(sib)) == BLACK &&colorOf(leftOf(sib)) == BLACK) {setColor(sib, RED);x = parentOf(x);} else {if (colorOf(leftOf(sib)) == BLACK) {setColor(rightOf(sib), BLACK);setColor(sib, RED);rotateLeft(sib);sib = leftOf(parentOf(x));}setColor(sib, colorOf(parentOf(x)));setColor(parentOf(x), BLACK);setColor(leftOf(sib), BLACK);rotateRight(parentOf(x));x = root;}}}setColor(x, BLACK);}

Java TreeMap 和 TreeSet 源码解析相关推荐

  1. 面试官系统精讲Java源码及大厂真题 - 11 HashSet、TreeSet 源码解析

    11 HashSet.TreeSet 源码解析 更新时间:2019-09-16 19:37:35 成功的奥秘在于目标的坚定. --迪斯雷利 引导语 HashSet.TreeSet 两个类是在 Map ...

  2. TreeSet源码解析

    TreeSet概述 所有实现的接口: Serializable, Cloneable, Iterable<E>, Collection<E>, NavigableSet< ...

  3. java arraylist 赋值_ArrayList源码解析,老哥,来一起复习一哈?

    点击上方"码农沉思录",选择"设为星标" 优质文章,及时送达 前言 JDK源码解析系列文章,都是基于JDK8分析的,虽然JDK14已经出来,但是JDK8我还不会 ...

  4. Java并发之Semaphore源码解析

    Semaphore 前情提要 在学习本章前,需要先了解ReentrantLock源码解析,ReentrantLock源码解析里介绍的方法有很多是本章的铺垫.下面,我们进入本章正题Semaphore. ...

  5. Java集合部分学习+源码解析

    Java集合 对象的容器,实现了对对象常用的操作,类似数组功能. 集合中的数据都是在内存中,当程序关闭或者重启后集合中的数据就会丢失,所以说是临时存储数据的容器 集合整体框架 Collection:单 ...

  6. Java FileReader InputStreamReader类源码解析

    FileReader 前面介绍FileInputStream的时候提到过,它是从文件读取字节,如果要从文件读取字符的话可以使用FileReader.FileReader是可以便利读取字符文件的类,构造 ...

  7. 爆火的Java面试题-kafka源码解析与实战豆瓣

    1 基础 为什么 Java 中只有值传递? int 范围?float 范围? hashCode 与 equals,什么关系? String StringBuffer 和 StringBuilder 的 ...

  8. 深入Java集合ArrayList的源码解析

    现在由大恶人付有杰来从增删改查几个角度轻度解析ArrayList的源码 首先ArrayList的底层数据结构非常简单,就是一个数组. 从源码第115行我们可以得出信息,他的默认数组长度是10. /** ...

  9. Java集合---Arrays类源码解析

    一.Arrays.sort()数组排序 Java Arrays中提供了对所有类型的排序.其中主要分为Primitive(8种基本类型)和Object两大类. 基本类型:采用调优的快速排序: 对象类型: ...

最新文章

  1. 代码攻击破坏设备,炸毁 27 吨发电机的背后
  2. FIS前端集成解决方案
  3. ARMV7,ARMV8
  4. php重载,PHP 重载
  5. 工业以太网交换机与网络交换机的区别
  6. 一步步编写操作系统80 扩展内联汇编1
  7. Javascript根据属性从对象数据中删除元素
  8. javascript释放对象_一文深入理解JavaScript如何运作
  9. paip.mysql 全文索引查询空白解决
  10. 软件测试和软件调试的区别
  11. 论文翻译:2021_TSCN:Decoupling magnitude and phase optimization with a two-stage deep network
  12. 靶子环数图片_一种靶子环数的图像识别方法与流程
  13. 2021Q2产品团队绩效总结--管理日记
  14. python做文本情感分析——某APP内评论内容作样本
  15. 如何获取小程序链接的配置参数
  16. SQL中PIVOT的用法
  17. Word中10以内的都是带圆圈的数字到了11就没有圆圈
  18. 验证运放输入端之间电容作用
  19. 【论文阅读】【逐字翻译】 爱丁堡大学IEEE TPAMI 2021年最新元学习综述 《Meta-Learning in Neural Networks: A Survey》
  20. 2013年最受欢迎的20大网页设计趋势

热门文章

  1. 时间同步软件 windows_电脑上好用的便利贴软件,PC端便签软件
  2. java web里实现 mvc_MVC模式在Java Web应用程序中的实现
  3. oracle 主机名改ip,[oracle 10.2]主机名或者IP地址改变造成的dbconsole服务无法启动解决...
  4. 骨架提取的MATLAB实现
  5. Kubernetes(1) kubectl 入门
  6. 发现了一个delphi的form的bug
  7. Eclipse-Java代码规范和质量检查插件-阿里编码规约
  8. 精确到秒的JQuery日期控件,jquery日历插件,jquery日期插件
  9. Erlang--热更新
  10. UIScrollView无法滚动可能的原因及解决办法分析