PerKins Zhu

Le vent se lève,il faut tenter de vivre.

导航

2016年9月5日

摘要: 享元模式:实现重复对象的共享,节约内存空间。内部状态可以共享,外部状态可以进行设置。 这个模式感觉有点像对象池(不同的是不同类型的对象只保存一个),需要使用的时候就从内存中取出该对象。 使用的时候需要从工厂中取出使用对象。 注意和单利模式的区别,单利只有一个该对象,但是本模式不仅仅有一个该对象。而是 阅读全文

posted @ 2016-09-05 17:36 PerKins.Zhu 阅读(196) 评论(0) 推荐(0) 编辑

2016年9月3日

摘要: 陆陆续续做了有一个月,期间因为各种技术问题被多次暂停,最关键的一次主要是因为存储容器使用的普通二叉树,在节点权重相同的情况下导致树高增高,在进行遍历的时候效率大大降低,甚至在使用递归的时候导致栈内存溢出。后来取消递归遍历算法,把普通的二叉排序树升级为平衡二叉树这才解决这些问题。着这个过程中把栈、队列 阅读全文

posted @ 2016-09-03 08:31 PerKins.Zhu 阅读(632) 评论(0) 推荐(0) 编辑

2016年9月2日

摘要: 观察者模式:如果一个对象(被观察者)状态改变时需要去通知其他对象(观察者)进行一些操作,此时可以使用观察者模式。 其实质还是通过观察者调用本身的方法进行操作。 示例说明:班长告诉学生老师来了。被观察者:班长,观察者:学生 被观察者: 定义观察者接口: 观察者实现类: 测试类: java中是定义的有观 阅读全文

posted @ 2016-09-02 15:10 PerKins.Zhu 阅读(176) 评论(0) 推荐(0) 编辑

2016年9月1日

摘要: 桥接模式:具有依赖关系的对象可以灵活的进行随意组合。 实例说明:人开车在路上跑。 能够自由组合人、车和路来实现各种情景 就像不知道1+1为什么等于2 一样,我也不知道为什么要使用桥接模式。可以解耦吧?不需要在person中new Car不需要在Car中new Road. 只需要在调用处注入三个对象便 阅读全文

posted @ 2016-09-01 21:32 PerKins.Zhu 阅读(493) 评论(0) 推荐(0) 编辑

2016年8月30日

摘要: 二叉排序树集中了数组的查找优势以及链表的插入、删除优势,因此在数据结构中占有一定的地位。但在一定的情况下二叉排序树又有可能变为链表,例如插入从1~100的数,这时进行数据查找的效率就要降低。 为了解决二叉排序树这种左右子树深度不均匀的情况引入了一种平衡二叉树(AVLTree):任何一个节点的左右子树 阅读全文

posted @ 2016-08-30 23:04 PerKins.Zhu 阅读(25825) 评论(5) 推荐(3) 编辑

摘要: 代理模式:代理者和被代理者实现共同的行为,然后让代理制调用被代理者完成这些行为。 示例说明:代理者Proxy 代理MrLi 给MrssHong 送礼物。 类图如下: 代码实现: 定义一个送礼物的接口:GiveGift 实现MrLi: 实现代理Proxy : 被送礼物者:MrssHong 测试类: 代 阅读全文

posted @ 2016-08-30 13:51 PerKins.Zhu 阅读(377) 评论(0) 推荐(0) 编辑

摘要: 装饰者模式:灵活的对一个对象的功能进行修改。 优势:可以自由的对对象进行功能(行为)进行添加、删除操作。而不像继承那样会继承一些父类多余的方法。 示例说明:创建两个人,一个正常的人(NormalPerson)可以进行呼吸、哭、说话、跑、跳、开车;另一个聋哑人只可以进行呼吸、跳、跑、哭。要求重用各种动 阅读全文

posted @ 2016-08-30 11:08 PerKins.Zhu 阅读(246) 评论(0) 推荐(0) 编辑

2016年8月29日

摘要: 单例模式:程序在运行期间只能有一个实例对象。 第一中实现方式:饥汉模式 在类进行初始化的时候 就加载了singleton 对象,这是会占用内存。 第二种实现方式:懒汉模式 在进行调用时对singleton进行实例化,这时如果多个线程同时调用getInstance(),这时线程存在安全问题。 为了解决 阅读全文

posted @ 2016-08-29 20:57 PerKins.Zhu 阅读(214) 评论(0) 推荐(1) 编辑

摘要: 建造者模式:把工人(对象组件的建造者ComputerCreator)给主管(Director),让主管告诉工人如何一步一步创建产品。 各司其职,主管知道该怎么创建对象,但是不会创建具体的对象模块。工人会创建具体的模块但是不知道给怎样一步一步创建。两者组合创建出需要的对象。 优势:把复杂对象的各个模块 阅读全文

posted @ 2016-08-29 17:00 PerKins.Zhu 阅读(305) 评论(0) 推荐(0) 编辑

摘要: 抽象工厂模式:用于解决“多个不同类型的对象需要被同一处调用且同一类型的不同对象需要被多处调用”的情景。 示例说明:工厂A(FactoryA)可以生产电脑A(ComputerA)和手机A(MobilePhoneA),工厂B(FactoryB)也可以生产电脑B(ComputerB)和手机B(Mobile 阅读全文

posted @ 2016-08-29 16:09 PerKins.Zhu 阅读(273) 评论(0) 推荐(0) 编辑

2016年8月28日

摘要: 工厂方法模式:让父类在不知道具体实现的情况下成自己功能的调用。实现方法是通过子类继承父类的抽象方法来获取被调用子类。(这里有些DI的味道) 优势:1、可以在不知道具体调用和实现的情况下进行编程 2、更加容易扩展新版本 劣势:1、在客户端需要和具体的产品对象进行耦合,在调用处必须要知道需要调用的具体类 阅读全文

posted @ 2016-08-28 11:44 PerKins.Zhu 阅读(362) 评论(0) 推荐(0) 编辑

2016年8月27日

摘要: 工厂模式:使用者不用创建使用对象,直接从工厂取出对象进行使用。 示例:子宫(工厂)创造各种动物 工厂模式的优势:在添加动物的时候不需要修改客户端(TestFactoryPattern),只需要直接添加动物就可以,工厂会自动(这时需要一个标示告诉工厂你需要那种动物,也就是type)返回需要的动物。 工 阅读全文

posted @ 2016-08-27 19:38 PerKins.Zhu 阅读(338) 评论(0) 推荐(0) 编辑

2016年8月21日

摘要: 在上一篇学习过HashMap(源码解读—HashMap)之后对hashTable也产生了兴趣,随即便把hashTable的源码看了一下。和hashMap类似,但是也有不同之处。 public class Hashtable<K,V> extends Dictionary<K,V> implement 阅读全文

posted @ 2016-08-21 12:40 PerKins.Zhu 阅读(1383) 评论(0) 推荐(0) 编辑

2016年8月19日

摘要: 更新:文章中“阀值”这个词是错误的,正确的是“阈值”,意思:阈值又叫临界值,是指一个效应能够产生的最低值或最高值。 ********************************************************************************* 什么是HashMap 阅读全文

posted @ 2016-08-19 17:34 PerKins.Zhu 阅读(455) 评论(0) 推荐(1) 编辑

摘要: Stack特性:先进后出、后进先出 java.util.Stack实现了这一数据结构。 public class Stack<E> extends Vector<E>,Stack继承Vector,Stack中的所有操作都是调用Vector中的方法进行操作,即使是数据的存储也是使用vector中的Ob 阅读全文

posted @ 2016-08-19 10:29 PerKins.Zhu 阅读(242) 评论(0) 推荐(0) 编辑

2016年8月18日

摘要: 学习了一下linkedList的源码,做下记录. java底层实现的是双向环链表,程序定义了一个header,来保存头结点,header.next指向最后一个节点(最后插入到),header.prevoious指向第一个节点(最先插入的)。 链表中的节点是通过Entry 来充当节点的: Entry是 阅读全文

posted @ 2016-08-18 17:15 PerKins.Zhu 阅读(257) 评论(0) 推荐(0) 编辑

2016年8月8日

摘要: 前段时间学习二叉树在处理删除操作的时候遇到一个头疼的问题:删除节点的时候明明已经置null了可树上该节点依旧存在,还必须执行node.father.left = null;才可以删除node节点,寻找了一下原因发现还是因为对java内存管理理解不够深入。 代码如下: 运行代码之后发现本来已经在cha 阅读全文

posted @ 2016-08-08 21:28 PerKins.Zhu 阅读(2878) 评论(1) 推荐(0) 编辑

2016年7月17日

摘要: 先说什么是栈: 1、后进先出 2、对数据的所有操作只能在固定的一端进行操作,不能再中间或者另一端对数据进行操作。 符合以上两点的 存储数据的类(对象) 叫做栈。 需要说明的是:栈是符合以上两个特性的所有的数据结构都可以叫做栈,无论其用什么基本容器实现的。 再说如何实现: 可以使用数组或者链表实现栈, 阅读全文

posted @ 2016-07-17 18:18 PerKins.Zhu 阅读(541) 评论(2) 推荐(0) 编辑

2016年7月16日

摘要: 要说希尔排序首先要明白插入排序,排序—插入排序 :http://www.cnblogs.com/PerkinsZhu/p/5664808.html 插入排序是直接对数组进行循环插入,二希尔排序是先把数组分隔成多个特别的数组,然后再对分割出来的数组进行插入排序。 该如何对数组进行分割呢? 取一个步长 阅读全文

posted @ 2016-07-16 13:15 PerKins.Zhu 阅读(229) 评论(0) 推荐(0) 编辑

2016年7月15日

摘要: 思路和插入排序一样,可见:http://www.cnblogs.com/PerkinsZhu/p/5664808.html 不同点: 在寻找插入位置的时候采用二分法定位。二分法怎么定位?…… 运行结果: 原数组: 21、8、2、18、0、9、27、12、5、24、 第0次循环排序结果: 8、21、2 阅读全文

posted @ 2016-07-15 18:56 PerKins.Zhu 阅读(6208) 评论(0) 推荐(1) 编辑

摘要: 快速排序: 1、从数组中随便选出一个数(其实一般用第一个数)作为本次循环的比较基数,然后走一趟,把所有比基数小的数放在该基数的左边,把大于该基数的数放在该基数的右边(排序结果有小到大,反之反之)。 (该基数在数组中的脚标是变动的,不要考虑比该基数小(大)的数较多,在其左(右)边放不下的弱智脑残问题) 阅读全文

posted @ 2016-07-15 14:55 PerKins.Zhu 阅读(487) 评论(0) 推荐(1) 编辑

2016年7月14日

摘要: 一段神奇的递归调用,一段神奇的数组合并! 要想搞清楚,首先弄明白两个问题:1、双层递归怎么走的。2、排好序的数组如何进行有序合并。 关于第一个问题,建议先看一下http://www.cnblogs.com/PerkinsZhu/p/5668218.html 看明白之后相信会对递归调用理解又进一个层次 阅读全文

posted @ 2016-07-14 12:17 PerKins.Zhu 阅读(235) 评论(0) 推荐(0) 编辑

2016年7月13日

摘要: 运行结果如下: 阅读全文

posted @ 2016-07-13 21:10 PerKins.Zhu 阅读(417) 评论(0) 推荐(0) 编辑

2016年7月12日

摘要: 排序要求:把长度为n的数组a按照从小到大的顺序进行排序。 冒泡排序思路:给定一个长度为n的数组a,循环n-1次,每次循环拿出a[i]和a[0]到a[i-1]之间的数进行比较,由右向左依次进行,如果a[i]小则继续向左比较,同时把a[j]向右移动 一位,如果a[i]大则赋值a[i]给a[j] 原数组: 阅读全文

posted @ 2016-07-12 20:44 PerKins.Zhu 阅读(877) 评论(0) 推荐(0) 编辑

2016年7月11日

摘要: 选择排序 排序要求:把长度为n的数组a按照从小到大的顺序进行排序。 冒泡排序思路:给定一个长度为n的数组a,循环n-1次,每次循环找出a[i]到a[n]中最小数的数,然后把该数和a[i]交换位置。 如何找出最小的数?:循环数组,逐个判断大小,把较小的数的脚标取出来,此次循环结束之后把脚标位置的数和a 阅读全文

posted @ 2016-07-11 20:15 PerKins.Zhu 阅读(201) 评论(0) 推荐(0) 编辑