treeMap 基于JDK 1.8的学习
困惑了很久的红黑树========来个了断吧
本文主要是为了描述旋转的原则,所以,至于红黑树的数据结构,红黑树的基本准则,不在强调,,红黑树困惑的就是这旋转的过程.!!!
画红黑树很简单的画图工具: https://sourceforge.net/projects/dia-installer/?source=typ_redirect11
参靠博客: http://www.cnblogs.com/skywang12345/p/3245399.html
https://www.cnblogs.com/xrq730/p/6867924.html
三大原则:前提是红黑树的五个性质(根是黑的,空节点是黑的,红色节点不连续)
1.当前节点的父节点是红色,且叔叔节点也是红色
将父节点设为黑色
将叔叔设置成 黑色,
祖父节点变红,
将祖父节点设为"新的当前节点 ”(红色节点),进行操作
2.父节点是红,叔叔是黑,且当前节点是父节点的右孩子
将父节点作为"新的当前节点 ”,
以"新的当前节点 ”为支点进行左旋
3.父节点是红,叔叔是黑,且当前节点是父节点的左孩子
将父节点设为"黑色",
将祖父节点设为红色,
以"祖父节点进行"右旋
比如
这是第三点,右旋
左旋加右旋
左旋,后右旋
对应的java 代码
if (parentOf(x) == leftOf(parentOf(parentOf(x)))) {//1.当前节点的父节点 是 祖父节的左节点
Entry<K,V> y = rightOf(parentOf(parentOf(x)));//叔叔(右)节点
if (colorOf(y) == RED) {//叔叔(右)节点是红色?
// 1.1父节点是红色,叔叔节点也是红色,设置父节点和叔叔节点都为黑色
setColor(parentOf(x), BLACK);//设置父节点为黑色
setColor(y, BLACK);//
setColor(parentOf(parentOf(x)), RED);
x = parentOf(parentOf(x));
} else {//叔叔(右)节点是黑色
// 1.2父节点是红色,叔叔节点是黑色
if (x == rightOf(parentOf(x))) {
//2.1 当前节点是右节点,则当前节点父节点左转
x = parentOf(x);//
rotateLeft(x);//左旋
}
setColor(parentOf(x), BLACK);//父节点变黑
setColor(parentOf(parentOf(x)), RED);//祖父节点变红
rotateRight(parentOf(parentOf(x)));
}
}
增加告一段落,,
删除真是过于复杂,遍历的时候采用的是中序遍历,找到最小的,然后左->父->右
treeMap 基于JDK 1.8的学习的更多相关文章
- fast-framework – 基于 JDK 8 实现的 Java Web MVC 框架
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! fast-framework 轻量级 Java Web 框架 – https://github. ...
- 大数据下基于Tensorflow框架的深度学习示例教程
近几年,信息时代的快速发展产生了海量数据,诞生了无数前沿的大数据技术与应用.在当今大数据时代的产业界,商业决策日益基于数据的分析作出.当数据膨胀到一定规模时,基于机器学习对海量复杂数据的分析更能产生较 ...
- Spring AOP源码分析(三):基于JDK动态代理和CGLIB创建代理对象的实现原理
AOP代理对象的创建 AOP相关的代理对象的创建主要在applyBeanPostProcessorsBeforeInstantiation方法实现: protected Object applyBea ...
- 基于JDK的动态代理原理分析
基于JDK的动态代理原理分析 这篇文章解决三个问题: What 动态代理是什么 How 动态代理怎么用 Why 动态代理的原理 动态代理是什么? 动态代理是代理模式的一种具体实现,是指在程序运行期间, ...
- 代码片段:基于 JDK 8 time包的时间工具类 TimeUtil
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “知识的工作者必须成为自己时间的首席执行官.” 前言 这次泥瓦匠带来的是一个好玩的基于 JDK ...
- JAVA WEBSERVICE服务端&客户端的配置及调用(基于JDK)
前言:我之前是从事C#开发的,因公司项目目前转战JAVA&ANDROID开发,由于对JAVA的各种不了解,遇到的也是重重困难.目前在做WEBSERVICE提供数据支持,看了网上相关大片的资料也 ...
- 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。
基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别. 我还是喜欢基于Schema风格的Spring事务管理,但也有很多人在用基于@Tras ...
- spring中基于JDK和CGLIB代理在项目的应用
一.环境与问题 环境 spring boot的版本是1.2.1.RELEASE.JDK版本是1.7 问题 A服务 PeopleService 调用B服务 HelloService ,其中B服务的方 ...
- Spring -- <tx:annotation-driven>注解基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)的区别。
借鉴:http://jinnianshilongnian.iteye.com/blog/1508018 基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional ...
随机推荐
- Java泛型深入理解(转载)
原文地址 http://blog.csdn.net/sunxianghuang/article/details/51982979 泛型之前 在面向对象编程语言中,多态算是一种泛化机制.例如,你可以将 ...
- Vue.js系列之项目结构说明
转:https://www.jb51.net/article/111658.htm 前言 在上一篇项目搭建文章中,我们已经下载安装了node环境以及vue-cli,并且已经成功构建了一个vue-cli ...
- [UE4]背景模糊
被遮挡的都会被模糊,没被遮挡的不会模糊
- arcgis for android 读取shp文件中文乱码解决方法
设置注册表默认字符,即可解决中文乱码问题. 'dbfDefault' 设置方法1.开始--运行,输入”Regedit“,打开注册表.2.如是用的是 10.x 版本 ArcGIS Desktop,定位到 ...
- python读写json+字典保存
解决方案 json 模块提供了一种很简单的方式来编码和解码JSON数据. 其中两个主要的函数是 json.dumps()和 json.loads() , 要比其他序列化函数库如pickle的接口少得多 ...
- 通过表达式树把datareader和datatable转换为实体
续上两篇文章,使用emit构造dynamic method,把 datareader转换为实体,以避免直接使用反射来实现带来的性能损失.代码看似没有纰漏,但是实际上我在framwork4下运行时,调用 ...
- CM+CDH大数据平台
我这里搭建的是3节点,centos6.5的静态ip ,ssh免密码登录,防火墙关闭,时钟同步等等一些准备工作我这里就不多说了 我们可以进官网看看 https://www.cloudera.com/ 我 ...
- linux设置服务器时间同步
yum install -y rdate 服务器请设置 */5 * * * * /usr/bin/rdate -s time-b.nist.gov ubuntu 设定时区:dpkg-reconfigu ...
- es6(10)--Set,Map(1)
//Set { let list=new Set(); list.add(5);//添加 list.add(7); //属性size就是长度 console.log('size',list.size) ...
- CentOS 7安装Oracle 12c
1.root身份安装依赖包: yum -y install binutils compat-libcap1 compat-libstdc++-33 compat-libstdc++-33*.i686 ...