java进阶(31)--TreeSet集合、TreeMap集合、自平衡二叉树
一、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集合、自平衡二叉树的更多相关文章
- 0015 Java学习笔记-集合-TreeMap集合
主要的方法 构造方法: TreeMap(); TreeMap(Comparator<?super K> comparator); TreeMap(Map<? extends K,? ...
- Java集合Set、Map、HashSet、HashMap、TreeSet、TreeMap等
1.Set和Map的关系: Set代表一种集合元素无序.不可重复的集合,Map代表一种由多个key-value对组成的集合. Set的集合继承体系: Map关系集合 Map集合的key特征:所有key ...
- Java集合--TreeMap
转载请注明出处:http://www.cnblogs.com/skywang12345/admin/EditPosts.aspx?postid=3310928 第1部分 TreeMap介绍 TreeM ...
- Java集合——TreeMap源码详解
)TreeMap 是一个有序的key-value集合,它是通过红黑树实现的.因为红黑树是平衡的二叉搜索树,所以其put(包含update操作).get.remove的时间复杂度都为log(n). (2 ...
- java基础36 双例集合Map下的HashMap和TreeMap集合
单例集合体系: ---------| collection 单例集合的根接口--------------| List 如果实现了list接口的集合类,具备的特点:有序,可重复 注:集合 ...
- java集合TreeMap应用---求一个字符串中,每一个字母出现的次数
package cn.itcast.p1.map.test; import java.util.Iterator; import java.util.Map; import java.util.Tre ...
- 【java集合框架源码剖析系列】java源码剖析之TreeMap
注:博主java集合框架源码剖析系列的源码全部基于JDK1.8.0版本.本博客将从源码角度带领大家学习关于TreeMap的知识. 一TreeMap的定义: public class TreeMap&l ...
- Java从入门到放弃18---Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法
Java从入门到放弃18—Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法01 Map集合Map集合处理键值映射关系的数据为了方便 ...
- 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 ...
随机推荐
- [python学习手册-笔记]004.动态类型
004.动态类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明作者和出 ...
- Docker部署Portainer搭建轻量级可视化管理UI
1. 简介 Portainer是一个轻量级的可视化的管理UI,其本身也是运行在Docker上的单个容器,提供用户更加简单的管理和监控宿主机上的Docker资源. 2. 安装Docker Doc ...
- f12 Network的解析
Chrome开发者工具面板 面板上包含了Elements面板.Console面板.Sources面板.Network面板.Timeline面板.Profiles面板.Application面板.Sec ...
- [日常摸鱼]bzoj1038 [ZJOI2008]瞭望塔-模拟退火/几何
题意:给一条平面内$n$个点的折线,要求在折线上搞一个高度$h$的瞭望塔,能够看见折线上所有的点,求$h$的最小值($n \leq 300$) updata2018.1.21 正解半平面交在另一篇里面 ...
- WIN7环境下配置vscode c++环境
目录 安装vscode 添加中文环境支持 添加c++支持 配置c++环境 安装MinGW 配置MinGW环境变量 配置vscode launch文件配置 task文件配置 可能出现的问题 安装vsco ...
- Flink任务暂停重启
查看正在进行的任务 ./flink list 取消job并保存状态 ./flink cancel -s jobid 重启job ./flink run -s savepointPath -c 主类 x ...
- 查询id为键的数组
public static function getKeyValuePairs() { $sql = 'SELECT id, name FROM ' . self::tableName() . ' O ...
- 精尽Spring MVC源码分析 - RequestToViewNameTranslator 组件
该系列文档是本人在学习 Spring MVC 的源码过程中总结下来的,可能对读者不太友好,请结合我的源码注释 Spring MVC 源码分析 GitHub 地址 进行阅读 Spring 版本:5.2. ...
- Python 中更优雅的日志记录方案
在 Python 中,一般情况下我们可能直接用自带的 logging 模块来记录日志,包括我之前的时候也是一样.在使用时我们需要配置一些 Handler.Formatter 来进行一些处理,比如把日志 ...
- Visual Studio 默认git拉取Github出错 No error could not read Username for 'https://github.com': terminal prompts disabled
发布到远程存储库时遇到错误: Git failed with a fatal error.fatal: HttpRequestException encountered. ��������ʱ��� ...