一、TreeSet集合简单

1、TreeSet集合底层是一个TreeMap

2、TreeMap集合底层是一个二叉树

3、放到TreeSet集合的元素等同于放到TreeMap集合的Key部分

4、TreeSet集合中元素:无序不可重复,但是可以按照元素大小顺序自动排序,称为可排序集合。

5、二叉树数据机构包含:Key,Value,left,right,parent

6、TreeSet集合或TreeMap集合的Key部分元素想做到排序,包含以下两种方式:

第一种:放在集合中元素需要实现Java.lang.Comparable接口

第二种:在构造TreeSet或者TreeMap集合时需要传一个比较器对象:comparator接口

7、comparable接口与comparator接口怎么选择?

当比较规则不会改变或规则只一个时一般选择comparable接口;

当比较规则有多个,并且需要各个比较规则之间频繁切换,建议使用comparator接口,符合ocp原则。

二、实例操作,TreeSet集合使用

1、根据数据库中数据,按照一定的顺序(String类型)取出

 2、根据数字(Integer)顺序取出

 3、对于自定义的类型来说,TreeSet可以排序吗?

报错:java.lang.ClassCastException,JAVAADVANCE.Person cannot be cast to java.lang.Comparable

以下程序:对于Person类型来说,无法排序,因为没有指定Person对象的比较规则;程序运行时出现异常

出错直接原因:Person未实现comparable接口。

 4、自定义类元素写入TreeSet,第一种方式:实现Comparable接口并重写compareTo方法。

 5、使用第一种方式-重新compareTo方法:实现客户按照“姓名“,”年龄“排序,当年龄相等时,按照姓名排序。

遍历集合,查看最终排序结果

  6、TreeSet集合中元素可排序的第二种方式:使用比较器的方式

注意:

Comparable是Java.lang包下的

Comparator是Java.until包下的

创建Tree集合使用编写的比较器,遍历集合,查看最终排序结果

7、使用第二种方式,但采取静态内部类的方式,使用比较器

查看运行的结果:

 三、自平衡二叉树

1、自平衡二叉树,遵循左小右大的原则存放数据

2、遍历二叉树的时候有三种方式:

  前序遍历:根左右

  中序遍历:左根右

  后序遍历:左右根

  注意:前中后说的是"根"的位置

  根在前面是前序,根在中间是中序,根在后面是后序

3、TreeSet集合/TreeMap集合采用是中序遍历方式

  Itertor迭代器采用的是中序遍历方式,即左根右

4、举例说明二叉树结构:

  数据如下:100,200,50,60,80,140,130,135,180.,666.40...

 5、采用中序方式遍历取出:

完成排序:40,50,55,60,80,100,120,130,135,140,180,200,666

java进阶(31)--TreeSet集合、TreeMap集合、自平衡二叉树的更多相关文章

  1. 0015 Java学习笔记-集合-TreeMap集合

    主要的方法 构造方法: TreeMap(); TreeMap(Comparator<?super K> comparator); TreeMap(Map<? extends K,? ...

  2. Java集合Set、Map、HashSet、HashMap、TreeSet、TreeMap等

    1.Set和Map的关系: Set代表一种集合元素无序.不可重复的集合,Map代表一种由多个key-value对组成的集合. Set的集合继承体系: Map关系集合 Map集合的key特征:所有key ...

  3. Java集合--TreeMap

    转载请注明出处:http://www.cnblogs.com/skywang12345/admin/EditPosts.aspx?postid=3310928 第1部分 TreeMap介绍 TreeM ...

  4. Java集合——TreeMap源码详解

    )TreeMap 是一个有序的key-value集合,它是通过红黑树实现的.因为红黑树是平衡的二叉搜索树,所以其put(包含update操作).get.remove的时间复杂度都为log(n). (2 ...

  5. java基础36 双例集合Map下的HashMap和TreeMap集合

    单例集合体系: ---------| collection  单例集合的根接口--------------| List  如果实现了list接口的集合类,具备的特点:有序,可重复       注:集合 ...

  6. java集合TreeMap应用---求一个字符串中,每一个字母出现的次数

    package cn.itcast.p1.map.test; import java.util.Iterator; import java.util.Map; import java.util.Tre ...

  7. 【java集合框架源码剖析系列】java源码剖析之TreeMap

    注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本.本博客将从源码角度带领大家学习关于TreeMap的知识. 一TreeMap的定义: public class TreeMap&l ...

  8. Java从入门到放弃18---Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法

    Java从入门到放弃18—Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法01 Map集合Map集合处理键值映射关系的数据为了方便 ...

  9. Java进阶学习之集合与泛型(1)

    目录 1.集合 1.1.集合是什么 1.2.集合框架结构 1.2.1.Collection 1.2.2.Map 1.3.集合接口实现类 1.3.1.LinkedList 1.3.2.ArrayList ...

随机推荐

  1. MariaDB的安装及相关配置

    MariaDB的安装及相关配置 安装 yum -y install mariadb mariadb-server 安装完成MariaDB,首先启动MariaDB systemctl start mar ...

  2. mysql单机多实例配置

    Windows上配置多个mysql实例,主要改下配置文件即可,mysql目录如下: my2中主要改两个配置内容 datadir = D:/Program Files/Mysql/mysql-5.7.2 ...

  3. 个人微信公众号搭建Python实现 -接收和发送消息-基本说明与实现(14.2.1)

    @ 目录 1.原理 2.接收普通消息 3.接收代码普通消息代码实现 1.原理 2.接收普通消息 其他消息类似参考官方文档 3.接收代码普通消息代码实现 from flask import Flask, ...

  4. 单身狗福利!利用java实现每天给对象发情话,脱单指日可待!

    引言 最近看到一篇用js代码实现表白的文章,深有感触. 然后发现自己也可以用java代码实现,然后就开始写代码了,发现还挺有意思的,话不多说开搞 实现思路: 使用HttpClient远程获取彩虹屁生成 ...

  5. 彻底理解Spring如何解决循环依赖

    Spring bean生命周期 可以简化为以下5步. 1.构建BeanDefinition 2.实例化 Instantiation 3.属性赋值 Populate 4.初始化 Initializati ...

  6. 给小白整理的一篇Python知识点

    1.基本概念 1.1 四种类型 python中数有四种类型:整数.长整数.浮点数和复数. python中数有四种类型:整数.长整数.浮点数和复数. 整数, 如 1 长整数 是比较大的整数 浮点数 如 ...

  7. C# Attribute特性 泛型<T> 方法的out ref this(扩展方法) Equals与==

    out ref out和ref的使用场景其实不一样.out适合在方法内返回一个额外的结果参数,而ref适合直接改变一个在方法外面的值,方法改变外部就改变,无需重新定义接住返回值再使用. out可以在方 ...

  8. Qt学习笔记-制作一个文本编辑器

    创建一个MainWindow工程.添加一个TextEdit.垂直布局. 在menu上面创建新的action. 在新建的时候判断文本有没有被修改. 下面,将某个文件打开读入到TextEdit中. 保存文 ...

  9. Go-Zero 短链项目 DevOps 实战,利用 Drone CI/CD 打通上云(Kubernetes)迭代流程

    Go-Zero 官方短链项目教程:快速构建高并发微服务 关于 go-zero,大家可以看文档.为少认为它是中国目前最好用的 golang 微服务框架. 完整的 Go-Zero ShortUrl Dev ...

  10. epoll原理与本质

    我们知道IO模型中有一个NIO模型,像我们平时接触到的dubbo类的RPC框架底层基于Netty作为通讯框架,而Netty实现的IO模型就是NIO模型.而NIO模型中 底层技术就用到了Linux的ep ...