一、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. 关于获取客户端IP问题

    //相关代码 1.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] 2.HttpContext ...

  2. 利用vs pcl库将多个PCD文件合并成一张PCD地图

    主机环境:win10系统,pcl库1.11.1, vs2019 pcl库安装以及环境配置如下连接: https://www.jb51.net/article/190710.htm 代码很简单,主要是做 ...

  3. easyui form提交时验证必填,打开时不显示必填提示

    给textbox添加required:true属性后,打开页面时整个表单都是红的,需要将其设置为提交时再验证. 解决方法:通过textbox的novalidate属性来控制是否开启验证 <inp ...

  4. ubuntu ImportError: No module named setuptools 一句命令解决方案

    https://blog.csdn.net/Super_jm_/article/details/81947563 使用pip安装文件时候提示  ImportError: No module named ...

  5. 有了Git这个功能,再也不需要依赖IDE了!

    大家好,今天给大家介绍一个隐藏的功能--搜索. 我们在写代码的时候经常遇到的一种情况就是,我们想要知道某一个函数是怎么定义的,这样我们才能知道该如何调用它.如果代码少的话我们当然可以自己人肉查找,但是 ...

  6. 谷歌学术: 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.

    原因是屏蔽了日本和新加坡的服务器,切换服务器为其他地方即可

  7. zabbix学习(一)——LNMP环境搭建及zabbix安装

    第一部分:LNMP环境搭建 一.环境说明: OS:   centos7.6_x64nginx:nginx-1.16.0php:   php-7.1.11mysql:mysql-5.6.44 zabbi ...

  8. windows下python3和python2虚拟环境配置

    Python3 被越来越多的开发者所接受,同时让人尴尬的是很多遗留的老系统依旧运行在 Python2 的环境中,因此有时你不得不同时在两个版本中进行开发,调试. 如何在系统中同时共存 Python2 ...

  9. Java基础进阶:时间类要点摘要,时间Date类实现格式化与解析源码实现详解,LocalDateTime时间类格式化与解析源码实现详解,Period,Duration获取时间间隔与源码实现,程序异常解析与处理方式

    要点摘要 课堂笔记 日期相关 JDK7 日期类-Date 概述 表示一个时间点对象,这个时间点是以1970年1月1日为参考点; 作用 可以通过该类的对象,表示一个时间,并面向对象操作时间; 构造方法 ...

  10. C#中搜索xsd文件中的某个数据源

    步骤 1.打开***.xsd文件. 2.数据源之间的空白处,右键->属性. 3.在VS右侧会跳出一个属性窗口. 4.有个名称为DataSet的下拉框,所有的数据源名称都在其中,单击即可定位到所选 ...