
java
阿波罗尼斯圆不是圆
阳光依旧
展开
-
赫夫曼树以及赫夫曼编码
赫夫曼树以及赫夫曼编码 赫夫曼树的基本介绍: 给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍夫曼树。赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 如下图中第二个树才是赫夫曼树,因为它的wpl值最小 赫夫曼树的几个重要概念: 1)、路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为原创 2020-12-07 18:14:15 · 536 阅读 · 0 评论 -
Java代码实现二叉树前序中序后序层序遍历
Java代码实现二叉树前序中序后序层序遍历 Node结点类 public class Node { // 左子结点 public Node left; // 右子结点 public Node right; // 结点的值 public String value; public Node(String value) { this.value = value; } @Override public String原创 2020-12-06 15:53:57 · 263 阅读 · 0 评论 -
二叉树的(4种)遍历算法
浅谈二叉树的(4种)遍历算法 遍历这棵二叉树无非有以下两种方式 层次遍历 普通遍历:从上到下从左到右 在普通遍历方式中,整个遍历二叉树的过程中,每个节点都被经过了 3 次(虽然叶子节点看似只经过了 2 次,但实际上可以看做是 3 次)。以节点 2 为例,它被经过了 3 次。 因此,在编程实现时,我们可以设定真正访问各个节点的时机,换句话说,我们既可以在第一次经过各节点时就执行访问程序,也可以在第二次经过各节点时访问,甚至可以在最后一次经过各节点时访问。 这也就引出了以下 3 种遍历二叉树的算法:原创 2020-11-26 17:16:11 · 779 阅读 · 0 评论 -
命令设计模式
命令设计模式 命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或交易(Transaction)模式。 命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。 命令模式的结构 命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。 每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式允许请求的一方和接收的一方独立开来转载 2020-11-26 15:21:06 · 222 阅读 · 0 评论 -
组合设计模式
组合设计模式 问题场景 假设现在有一个学校,学校中有不同的学院,学院中又有不同的专业,要求设计代码可以方便的对学院。专业进行增加删除,同时还可以遍历出这个学校的所有专业。 在没有学习组合模式之前,我是通过学校类组合学院类,学院类组合专业类来进行设计的。由于学校包含学院,学院包含专业,所以首先需要设计的是专业类,然后是学院类,最后是学校类 // 专业类 public class Department { public String name; public Department(Strin原创 2020-11-24 13:04:05 · 219 阅读 · 1 评论 -
桥接设计模式
桥接设计模式 在开始学java的时候老师讲到继承的时候,总是喜欢用一个例子来讲解,那就是画图,这里有一个画笔,可以画正方形、长方形、圆形(这个大家都知道怎么做吧,我就不解释了)。但是现在我们需要给这些形状进行上色,这里有三种颜色:白色、灰色、黑色。这里我们可以画出3*3=9中图形:白色正方形、白色长方形、白色圆形。。。。。。到这里了我们几乎到知道了这里存在两种解决方案: 方案一:为每种形状都提供各种颜色的版本。 方案二:根据实际需要对颜色和形状进行组合。 我们我们采用方案一来实现的话,我们是不是也可以这样来原创 2020-11-22 11:24:05 · 361 阅读 · 0 评论 -
适配器设计模式
java适配器(Adapter) 1. 概念 适配器模式把一个类的接口转换成客户端期待的另外一种接口, 从而是原本应用接口不匹配而无法在一起工作的两个类能够在一起工作. 举个例子来说,现在一般的家用电器要求的电压都是 220V,但有个别电器要求使用110V 电压,怎么办?这时就需要用一个能把 220V 电压转换成 110V 电压的变压器,这个变压器就是一个适配器。 2. 哪些情况需要适配器模式? 系统需要使用类的接口不符合系统的要求 要建立一个可以重复使用的类, 用于与该类之间的关联不大的一些类, 包括工原创 2020-11-21 21:14:02 · 131 阅读 · 0 评论 -
建造者设计模式
建造者设计模式 前言 建造者模式又被称呼为生成器模式,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 使用多个简单的对象一步一步构建成一个复杂的对象,有点像造房子一样一步步从地基做起到万丈高楼。注重的是new完对象之后的过程,而不是new 对象 简介 1、定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 2、主要作用:在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。(指挥者的作用) 3、如何使用:用户只需要给出指定复杂对象的类型和内容原创 2020-11-20 16:53:25 · 185 阅读 · 0 评论 -
Java创建对象的几种方法
Java创建对象的几种方法 Java中有5种创建对象的方式,下面给出它们的例子还有它们的字节码 使用new关键字 } → 调用了构造函数 使用Class类的newInstance方法 } → 调用了构造函数 使用Constructor类的newInstance方法 } → 调用了构造函数 使用clone方法 } → 没有调用构造函数 使用反序列化 } → 没有调用构造函数 如果你运行了末尾的的程序,你会发现方法1,2,3用构造函数创建对象,方法4,5没有调用构造函数。 1.使原创 2020-11-11 17:12:29 · 203 阅读 · 0 评论 -
关于`Object.clone()`子类不能调用的思考
关于Object.clone()子类不能调用的思考 我们知道,Object.clone()这是个被protected修饰符定义的方法,而在访问权限修饰表里我们可以看到protected修饰的成员变量或方法可以被本包以及这个类的子类中调用 访问修饰符 本类 本包 子类 其他包 public √ √ √ √ protected √ √ √ × (default) √ √ × × private √ × × × 现在我们来看一个情况,在protected_test包下有两个类,一个转载 2020-11-11 15:56:17 · 603 阅读 · 0 评论 -
模板方法设计模式
模板方法设计模式 定义 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 代码实现 抽象模板类 public abstract class HummerModel { abstract protected void start(); abstract protected void stop(); abstract protected void alarm(); abstract protecte原创 2020-11-10 22:04:39 · 153 阅读 · 0 评论 -
java中sleep()和wait()的异同
java中sleep()和wait()的异同 相同点: 一旦执行方法,都可以使线程进入阻塞状态 不同点: 两个方法声明的位置不同,Thread类中声明sleep(),Object类中声明wait() 调用的要求不同,sleep()可以在任何场景下使用,wait()只能在同步代码块中使用,且调用者必须是同步监视器 如果两个方法都使用在同步代码块中,前者不会释放锁,后者会释放锁。 ...原创 2020-09-16 19:48:17 · 145 阅读 · 0 评论