java
文章平均质量分 54
Astruries
知识就是力量
展开
-
CodeGenerator
import com.baomidou.mybatisplus.exceptions.MybatisPlusException;import com.baomidou.mybatisplus.generator.AutoGenerator;import com.baomidou.mybatisplus.generator.config.*;import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;import com.原创 2021-07-19 09:47:15 · 215 阅读 · 0 评论 -
计数排序
实现思路计数排序的思想是这样的:使用a,b,c三个数组,a存储要排序的数,c作为临时存储用,b存储最后的排序结果。很显然,这种排序方式不同于基于比较的排序算法,也非原址的。笔者的实现使用了四个for循环,虽然循环次数较多,但总的来说算法时间复杂度是O(N),相比基于比较的排序算法时间复杂度的下界O(N(logN))要好。第一个循环将c数组内容全部置零,目的是为了给第二个循环中计数创造初始条件。...原创 2018-08-12 22:30:53 · 128 阅读 · 0 评论 -
java23种设计模式-责任链模式
定义 属于行为型模式的一种,一个请求由多个对象来处理,这些对象形成一条链,请求沿着该链传递,直到该链上的某个对象处理它为止。角色抽象处理者 定义了处理方法,并且可以设置和返回下一个处理者。为接口或抽象类具体处理者 抽象处理者的实现实现/** * desc : 抽象处理者 * Created by tiantian on 2018/8/19 */p...原创 2018-08-19 16:25:06 · 158 阅读 · 0 评论 -
java23种设计模式-访问者模式
定义 封装一些作用于某种数据结构中各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。UML角色Visitor : 抽象访问者接口Element : 被访问元素接口ElementA,ElementB : 具体元素,实现了Element接口VisitorA,VisitorB : 具体访问者,实现了Visitor接口ObjectSt...原创 2018-09-15 15:37:48 · 160 阅读 · 0 评论 -
java23种设计模式-适配器模式
定义适配器模式是把一个类的接口转换成客户所期望的另一种接口,从而使原本不匹配而无法在一起工作的两个类可以一起工作。UML角色Target: 符合客户端期望的接口。Adaptee: 需要被适配的类。此类包含了客户端想要实现的大部分功能,但并不能完成客户端所想完成的所有任务,同时又不能被直接修改,因此需要被适配。Adapter: 适配器类。继承了Adaptee类的方法,如funct...原创 2018-10-02 12:32:35 · 154 阅读 · 0 评论 -
java23种设计模式-装饰者模式
定义装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。UML角色Component: 抽象组件接口ConcreteComponent: 具体组件实现类Decorator: 由abstract申明的抽象装饰者类,实现了Component接口ConcreteDecorator: 抽象装饰者的具体实现...原创 2018-10-05 16:06:51 · 162 阅读 · 0 评论 -
java23种设计模式-门面(外观)模式
定义外观模式为子系统的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。UML角色子系统(SubSystem): 表示一个系统的子系统或者模块门面(Facade): 客户端通过门面间接控制子系统。门面屏蔽了客户端无需知道的细节,简化了调用过程。示例我们使用的电脑的用户桌面便是一个很好的例子。桌面充当门面角色,用户使用的各应用可以看作子...原创 2018-10-06 16:47:00 · 200 阅读 · 0 评论 -
java23种设计模式-代理模式
定义为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。UML角色Target: 被代理类的接口。TargetImpl: 被代理类的实现。TargetProxy: Target实例的代理类,控制客户端访问Target对象。示例静态代理的实现/** * desc :...原创 2018-10-07 20:29:17 · 171 阅读 · 0 评论 -
java23种设计模式--桥接模式
定义1.将抽象部分与实现部分分离,使它们都可以独立的变化。2.将抽象和实现放在两个不同的类层次中,使它们可以独立地变化。——《Head First 设计模式》UML角色抽象化角色: 抽象了类的基本功能。聚合一个实现化角色完成功能。实现化角色接口: 一个类或者接口。定义实现化接口的基本功能。具体实现化角色: 实现了实现化角色定义的功能,使得具体实现能脱离抽象部分而独立变化。...原创 2018-10-14 17:02:13 · 192 阅读 · 0 评论 -
java23种设计模式-解释器模式
定义给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子UML角色抽象表达式(Expression):声明一个所有的具体表达式角色都需要实现的抽象接口。该接口提供一个interpret()方法。终结符表达式(Terminal Expression) :实现了抽象表达式接口,有一个interpret()方法;文法中的每一个终结符都有一个具体...原创 2018-09-30 19:04:08 · 208 阅读 · 0 评论 -
java23种设计模式--享元模式
定义享元模式以共享的方式高效地支持大量的细粒度对象。是结构型创建模式。UML角色FlyWeight: 抽象享元接口ConcreteFlyWeight: 具体享元类,实现了享元类。该类对象在创建时便初始化内蕴状态。FlyWeightFactory: 享元对象创建与管理工厂类。当创建一个享元对象时,先在工厂所维护的集合中查找是否存在可以共享的对象,存在则直接返回,不存在则创建并加入...原创 2018-10-16 15:17:51 · 394 阅读 · 0 评论 -
java23种设计模式-组合器模式
定义将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。–GoF《设计模式》UML角色Component: 组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component子部件。Leaf:* 在组合中表示叶子结点对象,叶子结点没有子结点。Composite: 定义有枝节点行为,...原创 2018-10-16 16:16:10 · 663 阅读 · 1 评论 -
java23种设计模式-命令模式
在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式(Command Pattern)。定义 将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数...原创 2018-08-12 22:29:34 · 136 阅读 · 0 评论 -
java23种设计模式-迭代器模式
定义 提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。角色抽象迭代器 定义了迭代器内部该有的方法具体迭代器 抽象迭代器的实现,has a 具体可迭代对象抽象容器 提供创建迭代器的方法以及一组集合对象的操作方法具体容器 实现了抽象容器实现/** * desc : 抽象迭代器 * Created by tiantian on...原创 2018-08-12 22:28:11 · 132 阅读 · 0 评论 -
快速排序的两种实现
快速排序是一种非常高效的基于比较的排序算法,其能在O(NlogN)的时间复杂度内完成排序。当然,这是期望运行时间,实际上也可能是O(N^2)。这取决与算法划分的是否平衡。快速排序算法的实现过程依赖于分治思想,按照分解、解决、合并的一般步骤看的话,快排实际上只用到了分解和解决两个步骤,因为快排是原址的,所以当合并的时候,排序的元素已经是有序状态了。版本一/** * desc : 快速排...原创 2018-08-05 23:31:32 · 316 阅读 · 0 评论 -
java23种设计模式—建造者模式
1. 定义:将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的对象。简单点描述就是将一个复杂对象的构建拆分成若干步骤,每个构建步骤赋予复杂对象不同的属性,如此以来,通过同样的构建过程可以创建不同的对象。对象的构建过程由指导者director指导。客户端通过指导者创建需要的对象。2. 该模式包含的角色及其功能:- 产品:需要被构造的对象- 建造者:具有一系列构建...原创 2018-06-20 10:48:30 · 3005 阅读 · 0 评论 -
java23种设计模式—原型模式
原型模式也属于创建型模式。简言之,就是如何复制一个对象的设计模式。创建对象的方式有很多种,对java而言,可以在JVM堆中new一个,也可以通过反射、序列化,又或者相应的对象工厂也可以代劳。我们关注的点是,创建对象的开销。当创建一个对象的消耗比较大的时候,使用原型模式可以很高效的创建对象。在java中顶层对象Object提供了clone()方法,只要我们正确的实现Cloneable接口的clone...原创 2018-07-07 18:42:56 · 2847 阅读 · 0 评论 -
java23种设计模式—工厂模式
设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。工厂模式简而言之就是用来创建对象的,属于...原创 2018-06-10 22:31:59 · 3146 阅读 · 0 评论 -
java23种设计模式—策略模式
策略模式是一种行为型设计模式,维基百科解释如下行为型设计模式:行为型设计模式是设计模式都一种,用来识别对象之间的常用交流模式并加以实现。如此可在进行这些交流活动时增强弹性。由此可以看出,行为型设计模式关注的是对象之间的通讯行为。定义策略模式:定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法都变化独立于使用算法都客户。角色分类 1.抽象策略接口 2.具体策略类 3.环境类UML图:常...原创 2018-07-14 20:42:13 · 3046 阅读 · 0 评论 -
最大子数组问题的两种解法
所谓最大子数组就是连续的若干数组元素,如果其和是最大的,那么这个子数组就称为该数组的最大子数组。最大子数组是很多问题的抽象,比如购买股票。如果把相邻两天的股价之差作为数组元素,那么求在连续的某个时间段内买入股票的最佳时间和卖出股票的最佳时间就可以抽象为计算最大子数组的问题。下面分别介绍两种算法求解最大子数组问题,算法思想均来自算法导论这本程序员的圣经。分治法分治法实现思路比较简单。如果把一...原创 2018-07-20 22:34:29 · 7933 阅读 · 1 评论 -
java23种设计模式-模版方法模式
定义定义一个算法中的操作框架,而将一些步骤延迟到子类中。使得子类可以不改变算法结构即可重定义该算法的某些特定步骤。角色该设计模式的角色划分较为简单抽象模版类具体模版类抽象模版类又包含了这样几个方法:模版方法,具体方法,抽象方法,勾子方法。模版方法决定了算法的实现步骤,该方法中调用了具体方法,待实现的抽象方法,勾子方法等。是算法执行的一个模版。具体方法...原创 2018-07-29 15:47:39 · 176 阅读 · 0 评论 -
java两种实用的排序(插入排序、归并排序)
插入排序插入排序是多种较为实用的排序方法之一。很多更高效的排序,当输入规模降低到一定程度就会切换到插入排序,因为在局部有序并且规模较小的情况下,插入排序非常高效。以下为代码实现。/** * Created by tiantian on 2018/7/9. */public class InsertSort { public static void sort(Int...原创 2018-07-15 23:54:56 · 2901 阅读 · 1 评论 -
堆排序(java实现)
说到堆排序不得不说一下堆这种数据结构。这里的堆指二叉堆,本质是一个数组。可看作一个近似的完全二叉树(完全二叉树是所有叶子节点深度相同,且所有内部节点度为二的二叉树)。二叉堆有两种表现形式,最大堆和最小堆。最大堆中最大元素在二叉树的根结点,最小堆正好相反。我们的目的就是利用最大堆的特点,完成排序。先上一段调试好的代码package algorithms.portion6.heap;/*...原创 2018-07-26 23:30:44 · 116 阅读 · 0 评论 -
java23种设计模式—观察者模式
定义观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,它大所有依赖者都会收到通知并自动更新。 角色观察者模式主要包含的角色为抽象观察者,抽象主题,以及它们各自具体的实现。 推模型推模型是一种主题对象状态发生变化时主动推送信息给所有观察者的模型,无论是否需要,被注册的观察者只能被动地接受改变。 抽象主题 /** * Create...原创 2018-07-22 19:51:44 · 162 阅读 · 0 评论 -
优先队列的实现
该优先队列的实现依赖于最大堆。关于最大堆,之前的博文:堆排序有讲。heapMaximum返回堆中键最大的元素,即array[0]。heapExtractMax方法删除并返回最大堆中最大键元素。heapIncreaseKey的作用是将元素i的关键字值增加到keymaxHeapInsert方法是将元素插入到最大堆中/** * desc : 优先队列 * Created by ti...原创 2018-08-05 23:30:03 · 1536 阅读 · 0 评论 -
java23种设计模式—单例模式的几种实现
饿汉式该方式创建的单例对象天生具有线程安全特性。原因很简单,JVM类加载器初次加载类的时候就创建了对象。实现起来也比较简单,只有一个地方需要注意,就是构造器要设计为private以防止类外部创建对象。/** * Created by tiantian on 2018/6/29. */public class HungrySingleTon { private s...原创 2018-07-01 01:02:52 · 2889 阅读 · 0 评论