一、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

最新文章

  1. 360浏览器7.1抓触屏QQ空间包
  2. AT指令调试程序
  3. 8.3 使用Fluent API进行属性映射【Code-First系列】
  4. python——进程基础
  5. 在C#中如何将多个rtf文件内容组合在一起用一个rtf文件保存?
  6. node基础04:模块调用
  7. mysql “group by ”与"order by"的研究--分类中最新的内容
  8. 【动态规划】The Triangle
  9. UIImageView属性
  10. sql server压缩数据库和日志文件
  11. JavaScript 的 Date 最详细解读
  12. SQL 中的常用函数及使用
  13. 采药 NOIP 2005 普及组
  14. PIL遇到问题解决
  15. BZOJ 2754: [SCOI2012]喵星球上的点名 [后缀数组+暴力]
  16. ssr panel魔改前端登陆面板配置邮件服务
  17. Bag of Tricks for Image Classification with Convolutional Neural Networks论文笔记
  18. 解决Warning Couldn't flush user prefs: java.util.prefs.BackingStoreException: Couldn't get file lock.
  19. ReactNative小笔记
  20. === $ spark sql 的特别的方法

热门文章

  1. Day5 - 02 定义函数
  2. 第二篇:docker 简单入门(二)
  3. Elements-of-Python_04_Function
  4. Java内存模型(MESI、内存屏障、volatile和锁及final内存语义)
  5. Android各版本迭代改动与适配集合
  6. 自适应查询执行:在运行时提升Spark SQL执行性能
  7. kubernetes环境搭建 -k8s笔记(一)
  8. python并发编程——多线程
  9. 太酷炫了!!我会Python 导包八种方法,你呢?
  10. Neighbour-Joining (NJ算法)