- 博客(28)
- 资源 (11)
- 收藏
- 关注
原创 策略模式
1.策略模式Strategy:属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。2.类图:3.代码:public class Context { //持有一个具体策略对象 private Strategy strategy; //传入一个具体的策略对象 public Cont...
2018-05-11 16:50:39
241
原创 建造者模式
1.建造者模式Builder:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。2.类图:3.代码:组装PC: 1.Diretor和Client需求沟通 ; 2.各个部件Builder 3.ConcreteBuilder去构建组件; 4.成品Productpublic abstract class Builder { //1.CPU public abstra...
2018-05-11 16:22:14
247
原创 装饰器模式
1.装饰器模式:Decorator Pattern,允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰着可以在所委托被装饰者的行为之前或者之后加上自己的行为。2.类图:3.代码:public interface Drink { public float cost(); public String getDescription();}public class Coffee imple...
2018-05-10 16:10:27
192
原创 观察者模式
1.观察者模式:在对象之间定义了一对多的依赖,当一个对象改变状态,依赖它的对象会收到通知并自动更新。即发布订阅模式:发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。2.类图:3.代码:场景:有一个微信公众号服务,不定时发布一些消息,关注公众号就可以收到推送消息,取消关注就收不到推送消息。//被观察者接口//声明了添加、删除、通知观察者方法public interface...
2018-05-10 15:04:17
208
原创 模板方法
1.模板方法:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。 模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 处理某个流程的的代码已经具备,但是其中某个结点的代码暂时不能确定。 因此采用工厂方法模式,将这部分代码实现转移给子类完成,即处理步骤在父类中定义好,具体的实现延迟到子类中。 2.类图: 3.代码: 实例:购物---> 1.下单...
2018-05-10 11:05:21
246
原创 单例模式
1.单例模式确保某各类只有一个实例,必须自己创建自己的唯一实例。一般通过将构造方法声明为private避免类在外部被实例化,在同一虚拟机范围内,Singleton的唯一实例只能通过getInstance()访问。2.实现方式:方案一:懒汉式单例类,在第一次调用的时候实例化自己public class Singleton { private Singleton() {} private stat...
2018-05-10 10:19:14
131
原创 适配器设计模式
AdapterPattern:将一个类的接口转换成客户希望的另外一个接口;Adapter模式使得原本由于接口不兼容而不能一起工作的类可以一起工作。
2018-04-19 07:22:46
222
原创 算法导论-图算法Part3
一.分治策略1.理论介绍:2.基本步骤: 1分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题; 2解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题; 3合并:将各个子问题的解合并为原问题的解;3.算法应用:I. 最大子数组问题();II.归并排序()、快速排序(Partition每次都划分得很均匀情况下为);二.动态规划1.理论介绍:I.两个要素:最优子结
2018-01-19 01:44:16
334
原创 算法导论-图算法Part1
1. 图的表示:1. 邻接链表:稀疏图;2. 邻接矩阵:稠密图;2. 广度优先搜索(1) 算法思想:1. 初始化结点、队列;同时根结点入队;2. 出队操作,同时将所有该结点的未被访问到的相邻结点入队;3. 队列为空则算法结束。(2)伪代码:第一部分:初始化每个结点,队列;第二部分:while Q!=null u=DeQueue(Q); for v in G.Adj[u]
2018-01-19 01:43:30
299
原创 Comparable与Comparator分析
一.ComparableComparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较,则依赖compareTo方法的实现,compareTo方法也被称为自然比较方法。如果开发者add进入一个Collection的对象想要Collections的sort方法帮你自动进行排序的话,那么
2018-01-19 01:38:50
207
原创 EnumSet-Enumeration
EnumSetEnumSet 是一个专为枚举设计的集合类,EnumSet中的所有元素都必须是指定枚举类型的枚举值,该枚举类型在创建EnumSet时显式或隐式地指定。EnumSet的集合元素也是有序的,EnumSet以枚举值在Enum类内的定义顺序来决定集合元素的顺序。EnumSet在内部以位向量的形式存储,这种存储形式非常紧凑、高效,因此EnumSet对象占用内存很小,而且运行效率很好
2018-01-19 01:36:21
261
原创 Java集合源码剖析-HashSet源码剖析
从上述HashSet源代码可以看出,它其实就是一个对HashMap的封装而已。所有放入HashSet中的集合元素实际上由HashMap的key来保存,而HashMap的value则存储了一个PRESENT,它是一个静态的Object对象。HashSet的绝大部分方法都是通过调用HashMap的方法来实现的,因此HashSet和HashMap两个集合在实现本质上是相同的。根据HashMap的一个特性: 将一个key-value对放入HashMap中时,首先根据key的hashCode()返回值决定该E
2018-01-19 01:04:49
249
原创 Java虚拟机-Java程序执行流程
程序执行流程我把它划分为以下几个步骤:编辑源码、编译生成class文件、(加载class文件、运行class字节码文件),其中后两个步骤都是在jvm虚拟机上执行的。
2018-01-13 00:51:04
7929
原创 Java集合源码剖析-LinkedHashmap源码剖析
先取得Entry,如果不为null,一样调用recordAccess方法,上面已经说得很清楚,这里不在多解释了。 7、最后说说LinkedHashMap是如何实现LRU的。首先,当accessOrder为true时,才会开启按访问顺序排序的模式,才能用来实现LRU算法。我们可以看到,无论是put方法还是get方法,都会导致目标Entry成为最近访问的Entry,因此便把该Entry加入到了双向链表的末尾(get方法通过调用recordAccess方法来实现,put方法在覆盖已有key的情况下,也是通
2018-01-13 00:12:14
208
原创 Java集合源码剖析-TreeMap源码剖析
TreeMap是基于红黑树实现的,这里只对红黑树做个简单的介绍,红黑树是一种特殊的二叉排序树,红黑树通过一些限制,使其不会出现二叉树排序树中极端的一边倒的情况,相对二叉排序树而言,这自然提高了查询的效率。
2018-01-12 23:53:40
219
原创 Java集合源码剖析-Hashtable源码剖析
Hashtable同样是基于哈希表实现的,同样每个元素是一个key-value对,其内部也是通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中。 Hashtable同样实现了Serializable接口,它支持序列化,实现了Cloneable接口,能被克隆。
2018-01-12 22:52:50
264
原创 Java集合源码剖析-Vector源码剖析
Vector也是基于数组实现的,是一个动态数组,其容量能自动增长。 Vector是JDK1.0引入了,它的很多实现方法都加入了同步语句,因此是线程安全的(其实也只是相对安全,有些时候还是要加入同步语句来保证线程的安全),可以用于多线程环境。 Vector没有实现Serializable接口,因此它不支持序列化,实现了Cloneable接口,能被克隆,实现了RandomAccess接口,支持快速随机访问。
2018-01-12 22:45:11
213
原创 Java集合源码剖析-HashMap源码剖析
一.概述 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。 HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。 HashMap 实现了Serializable接口,因此它支持序列化,实现了Cloneable接...
2018-01-01 01:49:03
279
原创 Java集合源码剖析-LinkedList源码剖析
LinkedList是基于双向循环链表实现的,除了可以当做链表来操作外,它还可以当做栈、队列和双端队列来使用。 LinkedList同样是非线程安全的,只在单线程下适合使用。 LinkedList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了Cloneable接口,能被克隆。
2018-01-01 01:38:09
291
原创 Java集合源码剖析-ArrayList源码剖析
ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。 ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用concurrent并发包下的CopyOnWriteArrayList类。 ArrayList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现
2018-01-01 01:08:03
493
1
原创 Java集合源码剖析-Java集合框架
Hi大家好,我是清和二七,今天我们来聊聊《Java集合源码剖析-Java集合框架》一.层次关系 Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。学习Java集合框架下大致可以分为如下五个部分:List列表、Set集合、Map映射、迭代器(Iterator、Enumeration)、工具类(Arrays、Col...
2017-12-31 22:14:21
6254
4
code learn for druid db pool
2023-05-16
Android手机文件管理APP
2018-08-24
基于JSP的图书馆管理系统(MySQL版)
2018-08-24
基于JSP的停车场管理系统(MySQL版)
2018-08-24
基于JSP的个人博客BLOG(SQLServer版)
2018-08-24
基于SSH的记账管理系统(MySQL版)
2018-08-24
基于ASP.NET的作业提交系统(SQLServer版)
2018-08-24
基于JSP的学生考勤管理系统(MySQL版)
2018-05-23
基于JSP的酒店预订系统(MySQL版)
2018-05-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人