JAVA-初步认识-常用对象API(集合框架-treeset集合-二叉树)

一.

treeset集合可以对其中的元素进行排序,它有两种排序方法,现在我们想知道它底层是什么结构,它是怎么确定元素位置的?它是有原因的,而且它这种结构对于排序而言,效率很高。

一说到排序,之前说到选择冒泡。选择冒泡对于比较次数而言,比较多一些,因为是转着圈在比。对于treeset而言,有个比较好的地方就是

将例子中的元素按照年龄排序,演示一遍它是怎么存放的。

存zhangsan,28的时候,就在容器中搞了一个zhangsan,28。容器中只有一个元素,不进行比较。紧跟着再来个lisi,21,lisi要调集自己的compareto和zhangsan碰一下。lisi和zhangsan一比,发现比28小,返回一个负数,紧跟着放在了28的左边。和28比完只有两种情况,要么是大,要么是小。有人说,不是还有相等的情况么,相等是进不来的。接着zhouqi来了,和28一比,比28还要大,它和21不需要再进行相比了,它直接放置在28的右边。接着25来了,和28比,比28小,就不和29相比了,这样一来就可以提高一点效率(如果一开始存储的数就是最值,那就惨了),没有必要挨个彭,这里是分了叉的。25比28小,往左边走,比21大,就往右边放。最后24来了,比28小,往左边走,比21大,往右走,比25小,往左走。

我们把这种结构称之为二叉树,从一个结点上分出两个叉。这是一种数据结构,凡是相同进不来。怎么判断相同,只要是返回0,就进不去。

因此,到现在我们就可以通过二叉树的方法完成排序,并能确定元素的位置。

二叉树中的结点有什么特点?首先结点包含了几个要素,就跟我们说链表一样,记住的是后面的数据。结点首先记住左边的数据,就是小的数据,小的就往左边放。21结点中持有几个引用?两个,一个叫做左,一个叫做右,右放置的都是大的数据。不止两个,还有一个叫做父,记住的是它爹,一共是三,但是有的没有三个,最多是三个。

这种结构怎么寻找数据呢?先从19开始,它是最小的,紧跟着往上找,因为19没有左边和右边。到21,按理说应该往上找,但是要看21右边有没有,有25。然后25的左右有没有?就按照这样的顺序找。我感觉这样的顺序很奇怪,无法展现二叉树的高效率。

现在说一个效率问题,如果存储的数据很多的话,每记一个元素,都一直往下加,很慢,那怎么办呢?

二叉树做的还是可以的,比如说按照下面的截图,装载了五个元素

在装19的时候,怎么装?截图中的五个元素也是有序的,我们想在一个有序的结构当中,去确定一个元素的位置,怎么做最方便?二分查找,不用从顶层往下挨个比较,取五个元素中折中的那个元素,折中的那个元素不一定是28,所以它每次在往里面放元素之前,先对已有的有序元素进行折半。这就是二叉树怎么提高效率地。

思考一个问题:现在用了比较器了,它厉害在能够对元素进行指定方式的排序。拿它能不能完成我们之前所学的有序的动作呢?要做怎么存进去,怎么取出来。

如果实现怎么存进去,怎么取出来,那就意味着先取出来的是28,再取的是21,那就是21大于28,或者说zhangsan先取出来,然后是lisi,也就是说lisi大于zhangsan,说的不是年龄值,而是对象,21所代表的这个对象。为什么呢?排完序后,取出来的都是最小的(这和存的时候,按照什么顺序存有关吧),其次才变大,所以取的时候,必须保证zhangsan是小于lisi的,那么这个怎么画?

如果是这么画的就是,21大于28,21位于28的右侧。21怎么能大于28呢?二叉树谁管你年龄和姓名,是你指定的。二叉树看的是返回值,你要是说返回0,那全都是一样的,不要把它固化在数值上。如果二叉树是下面截图这么画的话,取的先是28,28在这三个数中是最小的,右边放的全是大的,那么这个代码怎么写呢?

就不这儿那儿的比较了,全部返回正数。返回1就意味这,28先进来了,liasi和zhangsan一比,lisi就比zhangsan大,二叉树不管其它的,就看返回值是正负,还是0。观看输出结果,和存储的结果是一样的,这就是有序的。如果想要倒序的话,返回-1就可以了。

按照指定条件比较,别忘了主要条件和次要条件。

原文地址:https://www.cnblogs.com/wsw-bk/p/8316879.html

时间: 2024-07-30 09:13:13

JAVA-初步认识-常用对象API(集合框架-treeset集合-二叉树)的相关文章

黑马程序员-Java基础-集合框架-TreeSet、二叉树、泛型

第一讲 TreeSet 1.  概述 TreeSet可以对Set集合中的元素进行排序,按照自然顺序排. 2.  演示代码 输出结果: 总结:TreeSet会对元素进行自然排序,大写排在小写前面. 第二讲  TreeSet存储自定义对象 1. 概述: 将自定义对象存储到TreeSet集合中. 2. 思路: 自定义学生类,并将学生对象存储到TreeSet中,在存储过程中按照年龄排序. 3. 练习:往TreeSet集合中存储自定义对象(学生),并按照学生年龄进行排序 小结: 自定义对象需要重写Comp

JAVA学习第三十六课(常用对象API)- 集合框架(四)— Set集合:HashSet集合演示

随着Java学习的深入,感觉大一时搞了一年的ACM,简直是明智之举,Java里很多数据结构.算法类的东西,理解起来就轻松多了 Set集合下有两大子类开发常用 HashSet集合 .TreeSet集合 Set集合的元素是不重复且无序 一.HashSet集合 API文档解释:此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持.它不保证 set 的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用null 元素. 此类为基本操作提供了稳定性能,注意,此实现不是同步的. 由上可

JAVA学习第二十八课(常用对象API)- String类

多线程告一段落,开始常用对象API的涉及,背也要背下来!!! 日后开发,遇见最多的对象是文字,也就是字符串 String类 字符串是一个特殊对象 字符串一旦初始化就不可以被改变 一.特点 public class Main { public static void main(String[] args) { Demo1(); System.out.println("--------------"); Demo2(); } /*演示字符串的第一种定义方式,并明确字符串常量池的特点*/ p

Java EE中常用的四个框架

Java EE中常用的四个框架     Struts     Struts是一个基于Sun Java EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的.     Struts框架可分为以下四个主要部分,其中三个就和MVC模式紧密相关:     1.模型 (Model),本质上来说在Struts中Model是一个Action类(这个会在后面详细讨论),开发者通过其实现商业逻辑,同时用户请求通过控制器(Controller)向Action的转发过程是基于由struts-config

JAVASE02-Unit04: 集合框架 、 集合操作 —— 线性表

Unit04: 集合框架 . 集合操作 -- 线性表 操作集合元素相关方法 package day04; import java.util.ArrayList; import java.util.Collection; import day02.Point; /** * 操作集合元素相关方法 * @author adminitartor * */ public class Collection_Remove { public static void main(String[] args) { C

JAVA学习第三十四课(常用对象API)- 集合框架(二)—List集合及其子类特点

整个集合框架中最常用的就是List(列表)和Set(集) 一.List集合 && Set的特点 Collection的子接口: 1.List:有序(存入和取出的顺序一致),元素都有索引且可以重复    API文档解释:有序的 collection(也称为序列).此接口的用户可以对列表中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素. 2.Set:元素不能重复,无序,有可能会有序    API文档解释:一个不包含重复元素的 coll

JAVA学习第三十五课(常用对象API)- 集合框架(三)—Vector、LinkedList、ArrayList集合演示

集合框架构成图 摘自百度图片 一.Vector集合 演示 虽然Vector已经不常用了,但是还是要了解一下其中的方法 import java.util.ArrayList; import java.util.Enumeration; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; import java.util.Vector

JAVA学习第三十三课(常用对象API)- 集合框架(一)

数字有很多用数组存,对象有很多就要用集合存 但是数组是固定长度的,集合是可变长度的 集合的由来: 对象用来封装特有数据,对象多了需要存储,如果对象个数不确定,就需要使用集合容器来存储 集合的特点: 1.用于存储对象的容器 2.长度可变 3.集合中不可存储基本数据类型 对于集合体系,的最顶层存储的是该体系中所有的共性内容,Collection,同继承一样,看顶层,用底层 java.uitil包中的Cellection 集合容器因为内部的数据不同,有多种具体容器,不断向上抽取,就形成了集合框架 整个

JAVA学习第三十七课(常用对象API)- 集合框架(五)— Set集合:TreeSet集合

一.LinkedHashSet集合 HashSet下有子类LinkedHashSet API文档关于LinkedHashSet的解释: 具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现.此实现与 HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接列表.此链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代.注意,插入顺序不 受在 set 中重新插入的 元素的影响.(如果在 s.contains(e) 返回 true 后立即调用 s.add(