一、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. 转载:c# 获取CPU温度(非WMI,直接读取硬件)

    c#获取cpu温度 很早一个项目做远控,所以需要用到获取cpu温度,但是就是不知从何下手,无意中发现了Open Hardware Monitor,令我的项目成功完成 亲测20台清装xp sp2的机器, ...

  2. Jwt令牌创建

    添加依赖 <dependencies> <!-- jwt --> <dependency> <groupId>io.jsonwebtoken</g ...

  3. 使用纯js 不导包实现 table 导出 Excel

    1.将js粘贴到项目 2.设置table标签 id3.定义按钮,调用方法即可 1 <!DOCTYPE html> 2 <html lang="zh_CN"> ...

  4. 图书管理系统(Java实现,十个数据表,含源码、ER图,超详细报告解释,2020.7.11更新)

    图书管理系统数据库设计实验报告 文章目录 更新日志 1.概述 2.需求分析 2.1需要实现的功能 2.2业务流程图 2.2.1学生流程图 2.2.2管理员流程图 2.2.3超级管理员流程图 2.3功能 ...

  5. 双端口RAM和多模块存储器

    目录 双端口RAM 存取周期 双端口RAM 多模块存储器 普通存储器 单体多字存储器 多体并行的存储器 高位交叉编址的多体存储器 低位交叉编址的多提存储器 为什么要这么弄? 高位 低位 流水线(考试常 ...

  6. 三方登录微博url接口

    1.创建apps/oauth模块进行oauth认证 '''2.1 在apps文件夹下新建应用: oauth''' cd syl/apps python ../manage.py startapp oa ...

  7. Windows单机安装hadoop

    版本信息 Hadoop 3.2.0 java version "1.8.0_201" Windows 7专业版,64位 安装过程 jdk安装 下载jdk,解压到目录,D:\Java ...

  8. Spark性能调优篇六之调节数据本地化等待时长

    数据本地化等待时长调节的优化 在项目该如何使用? 通过 spark.locality.wait 参数进行设置,默认为3s,6s,10s. 项目中代码展示: new SparkConf().set(&q ...

  9. kali linux没有ip解决办法

    故障情况 今天打开kali202001复测环境,发现自启动ssh竟然连不上. 上到kali主机使用命令:ifconfig 查看发现没有ethh0网卡显示,看来是kal获取不到ip地址导致的 继续查看发 ...

  10. Protobuf简单类型直接反序列化方法

    我有一个想法,有一个能够进行跨平台的高性能数据协议规范,能够让数据在两个不同的程序之间进行读取,最好能够支持直接将object序列化,那就完美了. 目标 支持任意Object序列化 支持从类似Syst ...