自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 资源 (1)
  • 收藏
  • 关注

原创 设计模式——职责链模式

1.职责链模式的定义与特点责任链(Chain of Responsibility)模式的定义:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。我的理解:职责链模式其实这就是一个向上找责任人的问题,比如你是任课老师,有学生向你请假,你不能处理这个问题,就去找班主任;班主任...

2019-09-18 11:39:14 133

原创 设计模式——策略模式

1.策略模式的定义与特点策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。我的理解:其实策略模式就是将方法封装,然后你就可以指定策略来执行,而不再需要通过if…else判断。就比如,大...

2019-09-18 11:18:40 161

原创 设计模式——状态模式

1.状态模式的定义与特点状态(State)模式的定义:对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。我的理解:由于环境的变化,状态也会随之变化。就比如同样一个人,他在学校是学生,他在商店是顾客,他在家里是子女,他来适应环境,而并非环境强迫他做出改变。状态在环境中有一个初始状态,但是会根据传入的环境,自动的找到符合环境的当前状态,每一...

2019-09-18 10:50:29 145

原创 设计模式——解释器模式

1.模式的定义与特点解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口,该接口解释一个特定的上下文。我的理解:关于解释器模式,还需要设计到编译原理的知识。而且只是适用于当语言的文法较为简单,且执行效率不是关键问题时。因此在这里不做过多介绍...

2019-09-17 11:26:14 102

原创 设计模式——备忘录模式

1.备忘录模式的定义与特点备忘录(Memento)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。我的理解:备忘录模式就是后悔药。它将对象原先的属性记录下来,等到“后悔”的时候就可以回到原来的状态。当然有了备忘录,还要有一个使用备忘录的人,那么还需要一个管理者(CareTaker)。e...

2019-09-17 11:05:49 101

原创 设计模式——中介者模式

1.中介者模式的定义与特点中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。我的理解:将网状结构变为星型结构。当某个类需要用到其它类的方法,与该类发生依赖,这种情况多了以后,会出现一个复杂的网状结构。解决办法是可以定义一个中介者,它可以完成类的相互调用而不...

2019-09-17 09:30:26 109

原创 设计模式——观察者模式

1.观察者模式的定义与特点观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。我的理解:我觉的观察者模式说的不够准确,而应该叫发布者模式,因为它的思想就是:我的一个状态改变了,我就要让所有观察我的对象知道。向所有观察我的人发布推送。所以...

2019-09-16 11:09:41 125

原创 设计模式——迭代器模式

1.迭代器模式的定义与特点迭代器(Iterator)模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。迭代器模式是一种对象行为型模式。我的理解:迭代器模式就是为特定的容器配备特定的访问方法,迭代器知道内部数据是以怎样的方式存储,并且迭代器也会得到类的具体容器(构造器传入),所以可以访问内部数据。作为使用者,就不需要太关心类的内部结构,只要得到该类的迭代器就可...

2019-09-16 10:38:50 94

原创 设计模式——访问者模式

1.访问者模式的定义与特点访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。我的理解:对于某一个景点,青年人对它评价,中年人对它评价,老年人对它评价,按照以前的思考,这些评价是主观...

2019-09-16 09:48:38 170

原创 设计模式——命令模式

1.命令模式的定义与特点命令(Command)模式的定义如下:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。我的理解:命令模式主要是消除请求发送者和请求接收者的耦合。请求发送者主要负责发送命令,请求接受者主要负责执行命令,因此命令就是两者的中间桥梁。eg.人使用遥控器开灯和关灯的操作:遥...

2019-09-15 13:04:02 97

原创 设计模式——模板方法模式

1.模式的定义与特点模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。我的理解:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。此时可以用一个抽象类将这些步...

2019-09-15 10:56:14 108

原创 设计模式——代理模式

1.代理模式的定义与特点代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问。这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。我的理解:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。其实这种很像装饰者模式,但是又有所不同...

2019-09-15 09:41:38 76

原创 设计模式——享元模式

1.享元模式的定义与特点享元(Flyweight)模式的定义:运用共享技术来有効地支持大量细粒度对象的复用。它通过共享已经存在的又橡来大幅度减少需要创建的对象数量、避免大量相似类的开销,从而提高系统资源的利用率。我的理解:“享”就表示共享,“元”表示对象。享元模式是将一些特征相差不大,但是在程序运行时又要不得不一直创建的对象保存在资源池里。当该对象需要创建时,判断资源池中是否有所需的对象,如果...

2019-09-14 22:50:32 124

原创 设计模式——外观模式

1.外观模式的定义与特点外观(Facade)模式的定义:是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。我的理解:将很多类聚合到一个类中,该类可以拥有众多类的方法,向外提供了一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口...

2019-09-14 14:35:36 105

原创 设计模式——组合模式

1.组合模式的定义与特点组合(Composite)模式的定义:有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。我的理解:比如(学校——学院——系)这样一种结构模式:传统方案解决学校院系展示存在的问题分析将学院看做是学校的子类,系是学院的子类,这样实际上是站在组织大小来进行分层次的。实际上我们的要...

2019-09-14 10:56:53 116

原创 设计模式——装饰者模式

1.装饰者模式定义装饰者模式: 动态的将新功能附加到对象上。在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(ocp)。我的理解:举个例子,比如人的服装,人需要穿内衣和外套,内衣通常穿一件,而外套可以任意往上加,此时内衣就相当于要的对象(被装饰者),而外套就是要附加的功能(装饰者)。内衣确定的情况下,如何加外套呢?那就必须将内衣放在外套里。那么如果已经有了内衣和外套,还想再加外...

2019-09-14 10:24:09 95

原创 设计模式——桥接模式

1.桥接模式的定义与特点桥接(Bridge)模式的定义如下:将抽象与实现分离,使它们可以独立变化。它是用组合关系代替继承关系来实现,从而降低了抽象和实现这两个可变维度的耦合度。我的理解:就比如手机型号和手机品牌,如果使用继承的话,会得到如下如果将品牌作为接口,组合到手机中,得到如下:此时,抽象与实现分离,代码的扩展能力增强。2.桥接模式的结构桥接(Bridge)模式包含以下主要角色...

2019-09-14 09:53:50 106

原创 设计模式——适配器模式

1.适配器模式的定义适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。我的理解:其实问题就是,如何使两个不发生依赖的类A,B;A能调用到B中的方法。解决方法就是构建一个适配器,适配器从类B中获得方法,A从适配器中取想要的方法。适配器模式主要有:类适配器模式、对象适配器模式2.类适配器模式类适配器模...

2019-09-13 16:53:17 94

原创 设计模式——建造者模式

1.建造者模式的定义建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。我的理解:就比如建房子,建房子的步骤大致相同,但是每一步具体步骤又有不同。建造者模式将建房子的的...

2019-09-13 16:12:36 97

原创 设计模式——工厂模式

首先需要明确的一点是:工厂模式的主要作用是创建与使用分离。1.简单工厂模式简单工厂模式是属于创建型模式,是工厂模式的一种。 简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)在软件开发中,当我们会用到大量的创建某种、某类或者某批对象时,就会使用到工厂模式。使用...

2019-09-13 09:50:22 120

原创 设计模式——原型模式

1.原型模式的定义与工作原理原型模式的定义:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。工作原理:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建,即对象.clone()我的理解:使用JDK提供的clo...

2019-09-12 13:19:31 100

原创 设计模式——单例模式

1.单例模式的定义与特点单例(Singleton)模式的定义:指一个类只有一个实例,且该类能自行创建这个实例的一种模式。单例模式有 3 个特点:单例类只有一个实例对象;该单例对象必须由单例类自行创建;单例类对外提供一个访问该单例的全局访问点;我的理解:单例模式即最多只能创建该类的一个实例化对象,因此该类的构造函数必须私有化,对外只提供获取该对象的方法。2.单例模式的结构单例模式...

2019-09-12 11:37:02 96

原创 设计模式——设计模式的六大原则

1.设计模式的目的与思想设计模式目的代码重用性 (即:相同功能的代码,不用多次编写)可读性 (即:编程规范性, 便于其他程序员的阅读和理解)可扩展性 (即:当需要增加新的功能时,非常的方便,称为可维护)可靠性 (即:当我们增加新的功能后,对原来的功能没有影响)使程序呈现高内聚, 低耦合的特性设计模式思想找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在...

2019-09-09 13:49:32 197

原创 记2019.9.7华为机试

昨天参加了华为机考,今天将其记录一下,顺便总结一下不足。第一题:给一个数组,从位置0开始,求第一步可到达跳【1,length/2)步,接着每一步的步数是当前数组元素的的大小,问跳到数组的最后一个元素最少要多少步?eg[1,2,3,4,5,6,7,8]第一步:从1跳3步到arr[3]第二步:3+arr[3]=3+4=7 到达末尾结果:最少两步当时的解题思路:还挺简单,直接用暴力,求...

2019-09-08 11:03:52 1940

原创 设计模式-UML类图关系(依赖、泛化、实现、组合、聚合)

1.UML类图UML——Unified modeling language UML( 统一建模语言 ),是一种用于软件系统分析和设计的语言工具,它用于帮助软件开发人员进行思考和记录思路的结果UML图的分类 用例图 静态结构图:类图、对象图、包图、组件图、部署图 动态行为图:交互图(时序图与协作图)、状态图、活动图UML类图本身是一套符号的规定,就像数学符号和化学符号一样,这些符号用于...

2019-09-07 12:42:34 863

原创 Java 图的最短路径问题-迪杰斯特拉算法VS弗洛伊德算法

1.迪杰斯特拉算法VS弗洛伊德算法迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点的最短路径;弗洛伊德算法中每一个顶点都是出发访问点,所以需要将每一个顶点看做被访问顶点,求出从每一个顶点到其他顶点的最短路径。2.迪杰斯特拉算法迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思...

2019-09-05 19:32:03 714

原创 Java 最小生成树算法-普里姆算法和克鲁斯卡尔算法

1.生成树与最小生成树先介绍一下最小生成树(Minimum Cost Spanning Tree),简称MST。给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树N个顶点,一定有N-1条边包含全部顶点N-1条边都在图中求最小生成树的算法主要是:普里姆算法和克鲁斯卡尔算法2.普里姆算法和克鲁斯卡尔算法2.1普里姆算法普利姆(Prim)...

2019-09-05 18:26:55 781 5

原创 Java图的表示与遍历(深度优先算法DFS+广度优先算法BFS)

1.图的表示图的表示方式有两种:二维数组表示(邻接矩阵);链表表示(邻接表)邻接矩阵是表示图形中顶点之间相邻关系的矩阵,对于n个顶点的图而言,矩阵是的row和col表示的是1…n个点。邻接矩阵需要为每个顶点都分配n个边的空间,其实有很多边都是不存在,会造成空间的一定损失.邻接表的实现只关心存在的边,不关心不存在的边。因此没有空间浪费,邻接表由数组+链表组成为了表示方便,之后的图用二维...

2019-09-05 17:47:16 1510

原创 Java KMP算法

1.字符串匹配问题问题:有一个字符串 str1= “BBC ABCDAB ABCDABDABDE”,和一个子串 str2=“ABCDABD”现在要判断 str1 是否含有 str2, 如果存在,就返回第一次出现的位置, 如果没有,则返回-1分析:方法一:暴力穷举算法,将str1的第一个位置作为开始位置和str2进行依次匹配,匹配不成功,str1的第二个位置作为开始匹配的位置继续重复之前的操...

2019-09-04 19:12:17 307

原创 Java 平衡二叉树之单旋(左旋,右旋)与双旋

1.平衡二叉树平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树, 可以保证查询效率较高。具有以下特点:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。首先要明确的是,平衡二叉树是一棵二叉排序树(),它的出现是为了解决普通二叉排序树不平衡的问题。如图,在插入结点之前首先要查找插入位置...

2019-09-03 14:45:39 2433 3

原创 Java 二叉排序树的创建与结点删除

1.二叉排序树二叉排序树:BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。所以二叉排序树的中序遍历是升序。eg.数组为 Array(7, 3, 10, 12, 5, 1, 9)2.二叉排序树的创建(结点的添加)思想:比较待插入结点与当前结点的大小关系,若小于当前结点,往左...

2019-09-02 22:10:29 916

原创 Java 哈夫曼编码与解码

1.哈夫曼树给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。构成哈夫曼树的步骤:从小到大进行排序, 将每一个数据,每个数据都是一个节点 , 每个节点可以看成是一颗最简单的二叉树取出根节点权值最小的两棵二叉树组成一颗新的二叉树, 该新的二叉树的根节点的权值是前面两棵二叉树根节点权...

2019-09-02 14:07:08 1488 1

原创 Java 线索二叉树和自定义线索二叉树的代码实现

1.线索二叉树n个结点的二叉链表中含有n+1(推导:每个节点有两个指针域,除根节点外每个节点消耗一个指针域:2)个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索")这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序...

2019-09-01 17:07:14 293 1

原创 Java 前序中序后序遍历二叉树&查找二叉树的代码实现

1.二叉树的概念树有很多种,每个节点最多只能有两个子节点的一种形式称为二叉树。二叉树的子节点分为左节点和右节点。如果该二叉树的所有叶子节点都在最后一层,并且结点总数= 2^n -1 , n 为层数,则我们称为满二叉树。如果该二叉树的所有叶子节点都在最后一层或者倒数第二层,而且最后一层的叶子节点在左边连续,倒数第二层的叶子节点在右边连续,我们称为完全二叉树。树的遍历前序遍历: 先输出父...

2019-08-31 13:42:23 416

原创 Java 关于栈的一些常见算法题的记录(代码+详细注释)

1.自定义栈(数组实现)//使用数组模拟栈class MyStack{ private int maxSize; private int top; private int[] arr; //栈构造器 public MyStack(int maxSize) { this.maxSize=maxSize; arr=new int[maxSize]; top=-1; ...

2019-08-29 00:35:12 396

原创 Java 约瑟夫环问题的两种解法(循环数组,单向环形链表)

1.问题Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。2.解决方法一:循环数组提示:每次报数,如果满足出圈的条件就将数组元素设置为-1,当下次报数时跳过-1。直至数组最后一个元素变为-1...

2019-08-28 23:53:52 1018

原创 Java实现自定义HashMap

1.HashMap的实现原理HashMap底层实现采用了哈希表,这是一种非常重要的数据结构。哈希表的基本结构是数组加链表。able:核心存储结构,也称之为“位桶数组”transient Node<K,V>[] table;2.代码实现HashMap存储键值对的过程?1.调用Object.hashCode()2.HashMap.hash()3.根据hash,将Node存...

2019-08-26 20:32:49 811

原创 Java实现查找算法(线性查找+二分查找+插入查找+斐波拉契查找)

1. 线性查找算法/** * 线性查找算法 * 找到一个满足条件的值就返回,若未查找到,返回-1 * @param arr * @param n * @return */public static int seqSearch(int []arr,int n){//线性查找是逐一对比,发现有相同值,就返回下标for (int i = 0; i < arr.length; i...

2019-08-26 12:31:51 168

原创 Java 常用排序算法的实现(动图+代码+带详细备注)

1.常用的排序算法2.

2019-08-16 10:50:49 152

原创 Java 递归+回溯的应用(八皇后问题+数独问题)

Java 递归+回溯的应用(八皇后问题+数独问题)1.什么是八皇后问题?2.解题思路  首先将问题抽象,八皇后问题是一个二维数组,但是由于每行只摆放一个皇后,可用一维数组保存,即数组的索引为棋盘的行,数组的值为摆放在当前行的位置。如arr【0】=0,即在第1行的第1列放置一个皇后。这样问题就可以简化为求一个一维数组,同时这个一维数组需满足的条件是arr[i]!=arr[n](不能为同一列)...

2019-08-14 09:10:24 242

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除