tnblog
首页
视频
资源
登录

红黑树-练习 09

3997人阅读 2022/6/16 19:56 总访问:1589856 评论:0 收藏:0 手机
分类: Java集合


1、学生类的代码如下

  1. public class Student implements Comparable<Student{
  2.     private String name;
  3.     private int chinese;
  4.     private int math;
  5.     private int english;
  6.     public Student() {
  7.     }
  8.     public Student(String name, int chinese, int math, int english) {
  9.         this.name = name;
  10.         this.chinese = chinese;
  11.         this.math = math;
  12.         this.english = english;
  13.     }
  14.     public String getName() {
  15.         return name;
  16.     }
  17.     public void setName(String name) {
  18.         this.name = name;
  19.     }
  20.     public int getChinese() {
  21.         return chinese;
  22.     }
  23.     public void setChinese(int chinese) {
  24.         this.chinese = chinese;
  25.     }
  26.     public int getMath() {
  27.         return math;
  28.     }
  29.     public void setMath(int math) {
  30.         this.math = math;
  31.     }
  32.     public int getEnglish() {
  33.         return english;
  34.     }
  35.     public void setEnglish(int english) {
  36.         this.english = english;
  37.     }
  38.     @Override
  39.     public String toString() {
  40.         return "Student{" +
  41.                 "name='" + name + '\'' +
  42.                 ", chinese=" + chinese +
  43.                 ", math=" + math +
  44.                 ", english=" + english +
  45.                 '}';
  46.     }
  47.     public int getSum() {
  48.         return chinese + math + english;
  49.     }
  50.     @Override
  51.     public int compareTo(Student o) {
  52.         //按总分就行排序
  53.         int result = this.getSum() - o.getSum();
  54.         //次要条件
  55.         //如果总分成绩再相同,按语文成绩排序
  56.         result = result == 0 ? this.getChinese() - o.getChinese() : result;
  57.         //如果语文成绩再相同,按数学成绩排序
  58.         result = result == 0 ? this.getMath() - o.getMath() : result;
  59.         //如果数学成绩再相同,按英语成绩排序
  60.         result = result == 0 ? this.getEnglish() - o.getEnglish() : result;
  61.         //如果英语成绩再相同,根据姓名排序
  62.         result = result == 0 ? this.getName().compareTo(o.getName()): result;
  63.         return result;
  64.     }
  65. }

2-5、步骤代码如下

  1. public class MyCollection6 {
  2.     public static void main(String[] args) {
  3.         TreeSet<Student> st = new TreeSet<>();
  4.         Student s1 = new Student("dahei"808080);
  5.         Student s2 = new Student("erhei"909090);
  6.         Student s3 = new Student("xiaohei"100100100);
  7.         st.add(s1);
  8.         st.add(s2);
  9.         st.add(s3);
  10.         for (Student t : st) {
  11.             System.out.println(t);
  12.         }
  13.     }
  14. }


在此次set的底层原理
它在底层会把这三个对象封装成三个节点,如下图形式

1、在添加节点240时,它会破会红黑规则,原因:根节点必须是黑色。所以要把节点240变为黑色,样式如下图

2、添加节点270的结果如下图

3、添加节点300后,它破坏红黑规则。原因:不能出现两个红色节点相连

解决过程如下

解决依据

其父节点为红色,叔叔节点是黑色

1.将“父节点270”设为“黑色”
2.  将“祖父节点240”设为“红色”
3.以祖父节点为支点进行旋转(是左旋还是右旋要看左右俩边的大小,即左右俩边层数的比较)

结果如下图




评价

红黑树-简介和添加节点的默认颜色 06

一、红黑树红黑树是一种自平衡的二叉查找树,是计算机科学中用到的一种数据结构。1972年出现,当时被称之为平衡二叉B树。后...

红黑树-添加节点后如何保证红黑规则 07

以如下图几个节点为例,演示保证红黑规则红黑规则每一个节点是红色或者黑色,根节点必须是黑色每个叶节点(Nil)是黑色的;不...

红黑树-添加节点后如何保证红黑规则 08

一、在如下图所示的红黑树的基础上再添加节点15、14二、添加节点15后会破坏红黑规则,原因:不能出现两个红色节点相连,效...

Windows平台分布式架构实践 - 负载均衡

原文地址: https://www.cnblogs.com/atree/p/windows_loadbalancer.html 概述  最近.NET的世界开始闹腾了,微软官方终...

分布式-微服务-集群的区别

1.分布式将一个大的系统划分为多个业务模块,业务模块分别部署到不同的机器上,各个业务模块之间通过接口进行数据交互。区...

可输入下拉文本框,据输入,动态加载数据 jquery-editable-select

用到一个jquery-editable-select的控件github地址:https://github.com/indrimuska/jquery-editable-select这个插件的原理是...

Python学习 1-安装

Ptyhon非常简单易用的面向对象的脚本语言,跨平台 入门简单python分2个版本 Python2、Python3。Python 2.7 将于 2020 年结...

Python学习 2-基本语法

基础:python脚本语言,不需要编译(像C#、Java、PHP、C++需要编译成机器可识别的语言), 而直接由解释器解释,很多地方类似...

Python学习 3-爬虫基本介绍 及简单实例

爬虫爬虫就是一只猪,蜘蛛。。 网络蜘蛛。互联网是一个网由各个网站组成。无数的蜘蛛就在网上到处爬,根据网址从一个网站爬...

Redis基础安装操作-windows版

一、下载 redis官方没有提供windows版本,需要从微软的git下载releases版二、安装,启动1.解压出来 启动服务 可能会双击会...

Service-stack.redis配置连接池与读写分离(处理并发相关等)

配置连接池与读写分类 //写节点(主节点) List&lt;string&gt;writes=newList&lt;string&gt;(); writes.Add(&quot;123456a...

Service-stack.redis操作Redis 并发相关问题

1:不要循环去创建对象,循环去访问redis的时候要特别注意,应该传一个集合进去处理,而不是循环去处理2:要注意释放对象,使...

皓月有趣论题 - U盘或其他存储设备 存入数据后 质量是否发生改变

转自我的个人博客 http://blog.axibug.com之前、朋友提出“U盘或其他存储设备 存入数据后 质量是否发生改变”的问题。那么...

Python实例 1-日志抓取处理 补错(附日志小技巧)

有时候数据出了问题,可以从日志中恢复数据(如果你没记日志..没备份..→_→..)一、日志展示介绍个平常自己用的小方法,如...

Python实例 2-12306抢票(一) 登陆

开坑年关将近,终于对12306下手了,,平安夜撸代码,攻克了12306的登陆 2018-12-24 22:16:00没错 这篇博客就写从零开始的异...
没有个性,不需要签名
排名
4
文章
473
粉丝
3
评论
2
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术