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 ...
随机推荐
- 关于获取客户端IP问题
//相关代码 1.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] 2.HttpContext ...
- 利用vs pcl库将多个PCD文件合并成一张PCD地图
主机环境:win10系统,pcl库1.11.1, vs2019 pcl库安装以及环境配置如下连接: https://www.jb51.net/article/190710.htm 代码很简单,主要是做 ...
- easyui form提交时验证必填,打开时不显示必填提示
给textbox添加required:true属性后,打开页面时整个表单都是红的,需要将其设置为提交时再验证. 解决方法:通过textbox的novalidate属性来控制是否开启验证 <inp ...
- ubuntu ImportError: No module named setuptools 一句命令解决方案
https://blog.csdn.net/Super_jm_/article/details/81947563 使用pip安装文件时候提示 ImportError: No module named ...
- 有了Git这个功能,再也不需要依赖IDE了!
大家好,今天给大家介绍一个隐藏的功能--搜索. 我们在写代码的时候经常遇到的一种情况就是,我们想要知道某一个函数是怎么定义的,这样我们才能知道该如何调用它.如果代码少的话我们当然可以自己人肉查找,但是 ...
- 谷歌学术: but your computer or network may be sending automated queries. To protect our users, we can't process your request right now. See Google Help for more information.
原因是屏蔽了日本和新加坡的服务器,切换服务器为其他地方即可
- zabbix学习(一)——LNMP环境搭建及zabbix安装
第一部分:LNMP环境搭建 一.环境说明: OS: centos7.6_x64nginx:nginx-1.16.0php: php-7.1.11mysql:mysql-5.6.44 zabbi ...
- windows下python3和python2虚拟环境配置
Python3 被越来越多的开发者所接受,同时让人尴尬的是很多遗留的老系统依旧运行在 Python2 的环境中,因此有时你不得不同时在两个版本中进行开发,调试. 如何在系统中同时共存 Python2 ...
- Java基础进阶:时间类要点摘要,时间Date类实现格式化与解析源码实现详解,LocalDateTime时间类格式化与解析源码实现详解,Period,Duration获取时间间隔与源码实现,程序异常解析与处理方式
要点摘要 课堂笔记 日期相关 JDK7 日期类-Date 概述 表示一个时间点对象,这个时间点是以1970年1月1日为参考点; 作用 可以通过该类的对象,表示一个时间,并面向对象操作时间; 构造方法 ...
- C#中搜索xsd文件中的某个数据源
步骤 1.打开***.xsd文件. 2.数据源之间的空白处,右键->属性. 3.在VS右侧会跳出一个属性窗口. 4.有个名称为DataSet的下拉框,所有的数据源名称都在其中,单击即可定位到所选 ...