- 博客(89)
- 资源 (1)
- 收藏
- 关注
原创 快速排序
是对冒泡排序的一种改进。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 import java.util.Arrays;//快速排序public class QuickSort { public static void main(String[] args) { int[] arr = {-9,78,0,23,-5.
2021-03-07 14:31:49
80
原创 希尔排序
介绍排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。排序的分类:内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。常见的排序算法分类算法的时间复杂度事后统计的方法:这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素, 这种方式,要
2021-03-07 11:44:12
84
原创 插入排序
把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。package com.example.demo.shujujiegou;import java.util.Arrays;//插入排序public class InsertSort { public static void main(Strin.
2021-03-07 11:39:47
89
1
原创 选择排序
也是一种简单的排序方法。它的基本思想是:第一次从arr[0]arr[n-1]中选取最小值,与arr[0]交换,第二次从arr[1]~ arr[n-1]中选取最小值,与arr[1]交换,第三次从arr[2]~ arr[n-1]中选取最小值,与arr[2]交换第i次从arr[i-1]~ arr[n-1]中选取最小值,与arr[i-1]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。import java.util.Arrays;//选择排序public class Se.
2021-03-07 11:39:07
74
原创 冒泡排序
通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。import java.text.SimpleDateFormat;import java.util.Arrays;import java.util.Date;//冒泡排序public class BubbleSort { public static void main(String[] args) { //in.
2021-03-07 11:37:15
93
原创 排序算法介绍
介绍排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。排序的分类:内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。常见的排序算法分类算法的时间复杂度事后统计的方法:这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素, 这种方式,要
2021-03-07 11:36:34
176
原创 八皇后问题(回溯算法)
八皇后问题介绍八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。思路分析第一个皇后先放第一行第一列第二个皇后放在第二行第一列、然后判断是否OK, 如果不OK,继续放在第二列、第三列、依次把所有列都放完,找到一个合适继续第三个皇后,还是第一列、第二列……直到第8个皇后也能放在一个不冲突的位置,算是找到了一个正确解
2021-03-06 19:34:16
216
原创 递归介绍和迷宫问题(回溯)
介绍递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁递归用于解决什么样的问题各种数学问题如: 8皇后问题 , 汉诺塔, 阶乘问题, 迷宫问题, 球和篮子的问题(google编程大赛)各种算法中也会使用到递归,比如快排,归并排序,二分查找,分治算法等.将用栈解决的问题–>递归代码比较简洁递归需要遵守的重要规则执行一个方法时,就创建一个新的受保护的独立空间(栈空间)方法的局部变量是独立的,不会相互影响, 比如n变量如果方
2021-03-06 19:22:33
122
原创 逆波兰计算器和中缀转后缀
中缀表达式转换为后缀表达式初始化两个栈:运算符栈s1和储存中间结果的栈s2;从左至右扫描中缀表达式;遇到操作数时,将其压s2;遇到运算符时,比较其与s1栈顶运算符的优先级:如果s1为空,或栈顶运算符为左括号“(”,则直接将此运算符入栈;否则,若优先级比栈顶运算符的高,也将运算符压入s1否则,将s1栈顶的运算符弹出并压入到s2中,再次转到(4-1)与s1中新的栈顶运算符相比较;遇到括号时:(1) 如果是左括号“(”,则直接压入s1(2) 如果是右括号“)”,则依次弹出s1栈顶的运算符
2021-03-06 18:19:39
118
转载 中缀表达式栈实现综合计算器
介绍中缀表达式就是常见的运算表达式,如(3+4)×5-6中缀表达式的求值是我们人最熟悉的,但是对计算机来说却不好操作(前面我们讲的案例就能看的这个问题),因此,在计算结果时,往往会将中缀表达式转成其它表达式来操作(一般转成后缀表达式.)//中缀 实现计算器public class Calculator { public static void main(String[] args) { //根据前面老师思路,完成表达式的运算 String expres
2021-03-06 17:43:30
111
原创 java 栈的基本介绍
介绍栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入的元素最先删除,最先放入的元素最后删除栈的应用场景子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完后再将地
2021-03-06 16:22:23
2489
原创 java 约瑟夫问题
介绍package com.example.demo.shujujiegou;public class Josepfu { public static void main(String[] args) { // 测试一把看看构建环形链表,和遍历是否ok CircleSingleLinkedList circleSingleLinkedList = new CircleSingleLinkedList(); circl
2021-03-06 16:03:25
95
原创 双向链表
介绍使用带head头的双向链表实现 –水浒英雄排行榜管理单向链表的缺点分析:单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找。单向链表不能自我删除,需要靠辅助节点 ,而双向链表,则可以自我删除,所以前面我们单链表删除节点,总是找到temp,temp是待删除节点的前一个节点代码package com.example.demo.shujujiegou;public class DoubleLinkedListDemo {}//创建一个双向链表的类class Dou
2021-03-06 15:15:42
107
原创 单链表
介绍链表是以节点的方式来存储,是链式存储每个节点包含 data 域, next 域:指向下一个节点.链表的各个节点不一定是连续存储.链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定单链表(带头结点) 逻辑结构示意图如下代码先写个链表的增删改查,在更新一个面试题.求单链表中有效节点的个数查找单链表中的倒数第k个结点 【新浪面试题】单链表的反转【从尾到头打印单链表 【 要求方式1:反向遍历 。 方式2:Stack栈】合并两个有序的单链表,合并之后的链表依然有序【课后练
2021-03-06 14:50:00
213
原创 队列
介绍队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出数组模拟队列队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量。因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front及 rear分别记录队列前后端的下标,front 会随着数据输出而改变,而 rear则是随着数据输入而改变,如图所示:代码实现//数组模仿队列public clas
2021-03-06 12:58:14
114
原创 稀疏数组
介绍当一个数组大部分元素为0或者是一个值的数组是,可以使用稀疏数组保存稀疏数组的处理方法是:记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模此文以存放棋子为例package com.example.demo.shujujiegou;import java.io.*;import java.util.ArrayList;public class SparseArray { public static v
2021-03-06 10:55:31
64
原创 java设计模式-25职责链模式
定义责任链模式,为请求创建了一个接收者对象职责链模式通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推的链(简单示意图)。将请求和处理分开,实现解耦,提高系统的灵活性性能会受到影响,特别是在链比较长的时候,因此需控制链中最大节点数量调试不方便。采用了类似递归的方式,调试时逻辑可能比较复杂角色Handler : 抽象的处理者, 定义了一个处理请求的接口, 同时含义另外HandlerConcreteHandlerA , B
2021-02-28 14:41:02
113
1
原创 java设计模式-24策略模式
定义:定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户这算法体现了几个设计原则第一、把变化的代码从不变的代码中分离出来;第二、针对接口编程而不是具体类(定义了策略接口);第三、多用组合/聚合,少用继承(客户通过组合方式使用策略)。多用组合/聚合 少用继承;用行为类组合,而不是行为的继承。更有弹性体现了“对修改关闭,对扩展开放”原则,客户端增加行为不用修改原有代码,只要添加一种策略(或者行为)即可,避免了使用多重转移语句(if…else if…e
2021-02-28 13:07:11
111
1
原创 java设计模式-23状态模式
定义:它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类代码有很强的可读性。状态模式将每个状态的行为封装到对应的一个类中符合“开闭原则”。容易增删状态缺点:会产生很多类。每个状态都要一个对应的类,当状态过多时会产生很多类,加大维护难度角色Context 类为环境角色, 用于维护State实例,这个实例定义当前状态State 是抽象状态角色,定义一个接口封装
2021-02-28 12:46:54
80
原创 java设计模式-22解释器模式
定义:是指给定一个语言(表达式),定义它的文法的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子(表达式)在编译原理中,一个算术表达式通过词法分析器形成词法单元,而后这些词法单元再通过语法分析器构建语法分析树,最终形成一颗抽象的语法分析树。这里的词法分析器和语法分析器都可以看做是解释器当有一个语言需要解释执行,可将该语言中的句子表示为一个抽象语法树,就可以考虑使用解释器模式,让程序具有良好的扩展性优点扩展性好。由于在解释器模式中使用类来表示语言的文法规则,因此可以通过继承等机
2021-02-28 12:14:03
84
原创 java设计模式-21备忘录模式
定义在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态它提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用暂时存储起来的备忘录将状态复原。实现了信息的封装,不需要关心状态的保存细节。缺点:消耗资源,如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。备忘录模式的角色originator : 对象(需要保存状态的对象)Memento :
2021-02-28 10:16:09
85
1
原创 java设计模式-21中介者模式
定义定义一个中介对象来简化原有对象之间的交互关系,降低系统中对象间的耦合度,使原有对象之间不必相互了解。外观是提供一个共同接口,这个是直接调用其他系统,不用实现统一接口多个类相互耦合,会形成网状结构, 使用中介者模式将网状结构分离为星型结构,进行解耦,符合迪米特原则中介者承担了较多的责任,一旦中介者出现了问题,整个系统就会受到影响如果设计不当,中介者对象本身变得过于复杂,这点在实际使用时,要特别注意比如MVC模式,C(Controller控制器)是M(Model模型)和V(View视图)的中介
2021-02-28 09:53:19
138
1
原创 java设计模式-20观察者模式
定义对象之间多对一依赖的一种设计方案,依赖它的对象为被通知并更新信息其实就是发布订阅功能,订阅了就有消息了这个模式是松偶合的。改变主题或观察者中的一方,另一方不会受到影像。该模式包含四个角色抽象被观察者角色:也就是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。抽象观察者角色:为所有的具体观察者定义一个接口,在得到主题通知时更新自己。具体被观察者角色:也就是一个具体的
2021-02-28 08:58:07
93
原创 java设计模式-19迭代器模式
定义如果我们的集合元素是用不同的方式实现的,有数组,还有java的集合类,或者还有其他方式,当客户端要遍历这些集合元素的时候就要使用多种遍历方式,而且还会暴露元素的内部结构,可以考虑使用迭代器模式解决。迭代器模式,提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即:不暴露其内部的结构。)提供了一种设计思想,就是一个类应该只有一个引起变化的原因(叫做单一责任原则)。在聚合类中,我们把迭代器分开,就是要把管理对象集合和遍历对象集合的责任分开,这样一来集合改变的
2021-02-28 08:24:27
86
1
原创 java设计模式-18访问者模式
定义封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。在被访问的类里面加一个对外提供接待访问者的接口需要对一个对象结构中的对象进行很多不同操作(这些操作彼此没有关联),同时需要避免让这些操作"污染"这些对象的类,可以选用访问者模式解决访问者模式主要由这五个角色组成,抽象访问者(Visitor)角色:声明了一个或者多个方法操作,形成所有的具体访问者角色必须实现的接口。具体访问者(ConcreteVisitor)角色:实现抽象访问者所声明的接
2021-02-27 21:24:19
123
原创 java设计模式-17命令模式
定义:命名模式使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦。命令模式把请求封装起来,可以动态地对它进行参数化、队列化和日志化等操作,从而使得系统更灵活。命令模式中的命令对象能够很容易地组合成复合命令,也就是宏命令,从而使系统操作更简单,功能更强大。由于发起命令的对象和具体的实现完全解耦,因此扩展新的命令就很容易,只需要实现新的命令对象,然后在装配的时候,把具体的实现对象设置到命令对象中,然后就可以使用这个命令对象,已有的实现完全不用变化。代码盒式录音
2021-02-27 19:47:31
133
原创 java设计模式-16模板模式
定义在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行模板方法模式 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤基本思想是:算法只存在于一个地方,也就是在父类中,容易修改。需要修改算法时,只要修改父类的模板方法或者已经实现的某些步骤,子类就会继承这些修改**实现了最大化代码复用。**父类的模板方法和已实现的某些步骤会被子类继承而直接使用一般模板方法都加上final
2021-02-27 18:08:22
123
原创 java设计模式-15代理模式
定义代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象代理模式有不同的形式, 主要有三种 **静态代理、动态代理 **(JDK代理、接口代理)和 Cglib代理 (可以在内存动态的创建对象,而不需要实现接口, 他是属于动态代理的范畴)静态代理优点:在不修改目标对象的功能前提下,能通过代理对象对目标功能
2021-02-27 17:51:00
77
原创 java设计模式-14享元模式
定义:也叫 蝇量模式: 运用共享技术有效地支持大量细粒度的对象享元即为分享元素,字符串常量池、数据库连接池、缓冲池都是是这个道理能够解决重复对象的内存浪费的问题,当系统中有大量相似对象,需要缓冲池时。不需总是创建新对象,可以从缓冲池里拿。这样可以降低系统内存,同时提高效率必须有个工厂类来控制缺点:提高了系统的复杂度,需要分离出外部和内部状态,并且外部状态具有固有话性质,不应该随着内部状态变化而变化,否则会造成系统混乱内部和外部状态享元模式提出了两个要求:细粒度和共享对象。这里就涉及到内部
2021-02-27 16:39:56
79
原创 java设计模式-13外观模式
定义也叫“过程模式:外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节不能过多的或者不合理的使用外观模式,使用外观模式好,还是直接调用模块好。要以让系统有层次,利于维护为目的。角色>门面角色(facade):这是外观模式的核心。它被客户角色调用,因此它熟悉子系统的功能。它内部根据客户角色已有的需求预定了几
2021-02-27 15:17:23
178
原创 java设计模式-12组合模式
定义:组合多个对象形成树形结构以表示有整体-部分关系层次结构,组合模式可以让客户端统一对待单个对象和组合对象(类似递归)简化客户端操作。客户端只需要面对一致的对象而不用考虑整体部分或者节点叶子的问题。具有较强的扩展性。当我们要更改组合对象时,我们只需要调整内部的层次关系,客户端不用做出任何改动.方便创建出复杂的层次结构。客户端不用理会组合里面的组成细节,容易添加节点或者叶子从而创建出复杂的树形结构需要遍历组织机构,或者处理的对象具有树形结构时, 非常适合使用组合模式要求较高的抽象性,如果
2021-02-27 14:57:56
90
原创 java设计模式-11装饰者模式
定义完全遵守开闭原则,动态给对象增加一些职责(扩展功能),既增加其额外的功能,就是动态的把新功能加到对象上;就跟糖一样,买的时候有糖纸,其实本质还是糖,主要是增加功能继承的有力补充,比继承灵活,在不改变原有对象的情况下,动态的增加一些职责与代理的区别: 将原始对象作为一个参数传给装饰着,主要是增加功能,在运行时递归才能被构造缺点,增加许多子类,过分使用会增加程序复杂性装饰者模式就像打包一个快递 主体:比如:陶瓷、衣服 (Component) // 被装饰者 包装:比如:报纸填充、
2021-02-27 14:11:53
89
原创 java设计模式-10桥接模式
定义基于类的最小设计原则,将抽象部分与它的实现部分分离,使它们都可以独立的变化。继承关系多了,不易于维护父类,而笔者认为桥接模式的出现很好的解决了这个问题。用聚合解决继承的父类难维护性桥梁模式是对象的结构模式。又称为柄体(Handle and Body)模式或接口(Interface)模式。桥梁模式的用意是“将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化”。基于类的最小设计选择,通过封装,聚合以及继承等行为让不同的类,承担不同职责应用场景
2021-02-27 13:09:26
86
原创 java设计模式-09适配器模式
定义:将某个类的接口转成客户端期望的另外一个接口表示,主要目的是兼容性使用起来有点像多重集成机制, 利用接口的特性, 把一些零散类组织到一起, 成为一个新的类来实现调用, 并且看起来像是对一个类的操作. 实际上, 适配器模式更过的是强调对代码的组织, 而不是功能的实现角色:Target: 目标接口类, 客户所期待的接口, 目标可以是具体的或者抽象的类, 也可以是接口Adaptee: 需要适配的类Adapter: 通过包装一个需要的支配器对象, 把原来的接口转换成目标接口优点:系统需
2021-02-27 11:50:01
109
原创 java设计模式-08建造者模式
定义为了分离对象的属性与创建过程又被称呼为生成器模式,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。使用多个简单的对象一步一步构建成一个复杂的对象,有点像造房子一样一步步从地基做起到万丈高楼。主要作用:在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。如何使用:用户只需要给出指定复杂对象的类型和内容,建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来)注意事项:与工厂模式的区别是:建造者模式更加关注与零件装配的顺序,一般用来创建更为复杂的对象
2021-02-26 23:37:38
122
原创 java设计模式-07-原型工厂模式(克隆)
定义通过将一个原型对象传给要发动创建的对象,这个要发动的创建的对象通过请求原型对象了拷贝他们自己实现创建,即 对象.clone()用原型实例指定创建对象的种类,并且通过拷贝,创建新的对象缺点:需要为每一类配置一个克隆方法,对已有类改造,需修改源代码,违背了ocp原则浅拷贝定义:而浅拷贝只是传递地址指向,新的对象并没有对引用数据类型创建内存空间。对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行值传递,也就是将该属性值复制一份给新的对象。对于数据类型是引用数据类型的成员变量,比如说成员
2021-02-26 21:40:32
336
原创 java设计模式-06-抽象工厂模式
定义:抽象工厂模式是所有形态的工厂模式中最为抽象和最其一般性的。抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,能够创建多个产品族的产品对象。模式中包含的角色及其职责抽象工厂(Creator)角色:抽象工厂模式的核心,包含对多个产品结构的声明,任何工厂类都必须实现这个接口。(FruitFactory)具体工厂( Concrete Creator)角色:具体工厂类是抽象工厂的一个实现,负责实例化某个产品族中的产品对象。(InnerFruitFactory,No
2021-02-26 20:41:44
96
1
原创 java设计模式-05-工厂模式
定义工厂方法模式同样属于类的创建型模式又被称为多态工厂模式 。工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。定义一个创建对象的抽象方法,由子类决定要实例化的类(对象实例化由子类实现)这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。名词解释抽象工厂(Creator)角色:工厂方法模式的核心,任何工厂类都必须实现这个接口(FruitFactory)具体工厂( Concrete Creator)角色:具体工厂类是抽
2021-02-26 20:19:03
171
2
原创 java设计模式-04-简单工厂
定义:也叫静态工厂模式;一个工厂对象决定创建出哪一种产品的实例(传入一个type,实例并执行type对应逻辑)最简单也是最实用的模式通过专门定义一个类来负责创建其它类的实例,被创建的实例通常 都具有共同的父类。工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做的并不好
2021-02-25 22:33:20
67
原创 java设计模式-03单例模式-本文介绍7种方法
单例模式特点单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。饿汉式(静态常量)构造器私有化类内部创建向外部暴露一个静态的公共方法优点;简单,避免了线程同步问题缺点,如果没使用,就造成了内存浪费;2没有达到满加载效果代码实现:饿汉式(静态代码块)只是实现方式不同,优缺点和上述一致代码实现:懒汉式(线程不安全)优点:懒加载缺点:只能在单线程下,多线程会造成多个实例,实际开发中,不能使
2021-02-25 21:32:22
85
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅