06 2016 档案

摘要:△wait()和sleep()的区别: 1.wait():没有等待时间,而sleep()需要有等待时间作为参数。 2.在同步中对于CPU的执行权和锁的处理不同: wait()会释放执行权和锁.醒来后需要重新竞争锁. sleep():释放执行权和,不会释放锁 void show(){ Synchron 阅读全文
posted @ 2016-06-30 22:40 hlhdidi 阅读(265) 评论(0) 推荐(0)
摘要:利用ArrayBlockingQueue可以方便的实现生产者和消费者,所有消费者线程共用资源ArrayBlockingQueue对象,从而实现线程安全.生产者线程搜索当前目录及子目录,并且将相应的File对象添加到队列中,消费者线程对每个File对象进行关键字的查询,如果查到头,即停止查询. 阅读全文
posted @ 2016-06-30 21:34 hlhdidi 阅读(606) 评论(0) 推荐(0)
摘要:多生产者多消费者是Java中的一个经典的案例,采用等待唤醒机制来实现,代码如下: 还有一种采用BlockQueue实现的多生产者多消费者模式: 阅读全文
posted @ 2016-06-30 12:39 hlhdidi 阅读(348) 评论(0) 推荐(0)
摘要:链表是一个递归的数据结构,它或者为null,或者是指向一个结点的引用,该结点含有一个泛型的元素和指向另一个链表的引用.可以用一个内部类来定义节点的抽象数据类型: 根据递归的定义,我们只需一个Node类型的变量就能表示一条链表,只要保证它的值是null或者指向另一个Node对象,且该对象的next域指 阅读全文
posted @ 2016-06-29 12:13 hlhdidi 阅读(473) 评论(0) 推荐(0)
摘要:在实现Queue的API的时候,可以使用两个实例变量做索引,一个变量head指向队列的开头,另一个变量tail指向队列的结尾.在删除一个元素的时候,使用head访问,并将head+1,插入一个元素的时候,使用tail保存它,并将tail加1.如果某个索引增加到超过了数组的边界的时候,则将它重置为0. 阅读全文
posted @ 2016-06-29 10:27 hlhdidi 阅读(3526) 评论(0) 推荐(0)
摘要:栈是一个常用的最简单的数据结构,这里提供了其实现.内部维护了一个数组,并且可以动态的调整数组的大小.而且,提供了迭代器支持后进先出的迭代功能.Stack的实现是所有集合类抽象数据类型实现的模板,它将所有元素保存在数组中,并动态的调整数组的大小,以保持数组大小和栈大小之比小于一个常数. 阅读全文
posted @ 2016-06-29 09:02 hlhdidi 阅读(1219) 评论(0) 推荐(0)
摘要:例如:如果输入:( ( 1 + 2 ) * ( 3 + ( 4 * 5 ) ) )可以计算出输入的字符串所对应的算术表达式的值.我们支持运算符+,-,*,/,和一个一元运算abs,可以用一个简单的算法获取这个算术表达式的值: 我们用两个栈(一个用于保存操作符,一个用于保存操作数).表达式由括号,运算 阅读全文
posted @ 2016-06-29 08:12 hlhdidi 阅读(1109) 评论(0) 推荐(0)
摘要:组合模式允许你将对象组成树形结构,来表现整体和部分的联系.组合能让客户以一致的方式处理个别对象和对象的组合. 组合模式将整体称为组合.(类似于树结构中的树),将组合下面没有其他元素相连的物件称为叶结点.其中,组合和叶结点有着共同的父类,可以将两者所有的方法抽象到父类中,并且对方法有默认的实现,这样如 阅读全文
posted @ 2016-06-25 20:07 hlhdidi 阅读(201) 评论(0) 推荐(0)
摘要:△列表迭代器也是不支持在迭代的时候添加元素的,只是列表迭代器自己定义了增删的方法而已.迭代器可以看成实在两个元素之间的指针,每当调用next就跳过一个元素并返回刚刚跳过的元素. △HashTable不允许null作为键和值,而HashMap可以. △在Java中,所有链表实际上都是双向连接的,即每个 阅读全文
posted @ 2016-06-25 09:15 hlhdidi 阅读(218) 评论(0) 推荐(0)
摘要:有一道很经典的Java题目,虽然很简单,但是可以开发出很多种不同的解法,这是我在今天重新复习了正则的时候,忽然回想起来的.题目的名字是:"查找一个小串在大串中出现的次数."有三种思路,第一种,利用substring,通过寻找小串出现的位置,改变大串从小串出现的位置处重新寻找小串的位置,以此类推.第二 阅读全文
posted @ 2016-06-23 19:26 hlhdidi 阅读(203) 评论(0) 推荐(0)
摘要:状态模式允许对象在内部状态改变的时候,改变它的行为,对象看起来好像修改了它的类.因为这个模式将状态封装成为独立的类,并将动作委托到代表当前状态的对象,而行为会随着内部状态而改变. 在状态模式中,Context内部持有状态,State接口定义了一个所有具体状态的共同接口,任何状态都实现这个相同的接口, 阅读全文
posted @ 2016-06-21 22:25 hlhdidi 阅读(205) 评论(0) 推荐(0)
摘要:迭代器模式提供了一种方法顺序访问一个聚合对象中的各个元素,而又不是暴露其内部的表示.将在聚合对象内部游走的任务放在迭代器上而不是放在聚合上,这样简化了聚合的接口和实现,也让责任各得其所. 例如在没有进行优化的下列代码中,在处理不同的对象的聚合的时候,获取了对象的内部实现,这对封装造成了破坏,另外一方 阅读全文
posted @ 2016-06-21 21:05 hlhdidi 阅读(232) 评论(0) 推荐(0)
摘要:模板模式在父类中定义了一个方法的模板,而子类可以动态的实现模板成分方法,但是模板中的方法顺序无法改变. 父类中的模板方法往往申明为final,用来保证方法不被子类覆盖,因为作为模板,是不可以改变的,但是模板方法内的一系列方法,可以由子类自己静态实现,同时在父类的模板方法中,可以定义钩子(hook)方 阅读全文
posted @ 2016-06-20 22:28 hlhdidi 阅读(194) 评论(0) 推荐(0)
摘要:今晚看了core Java的泛型部分,万万没有想到,当时看培训班视频入门的一带而过的泛型,有这样多的细节,整理了一下书里面提到的一些自认为的重点,方便以后观阅.由于是复习,一些基础知识跳过. △泛型类型的限定:即<T extends Comparable>类型,T为绑定类型的子类型,而一个类型的变量 阅读全文
posted @ 2016-06-19 22:39 hlhdidi 阅读(212) 评论(0) 推荐(0)
摘要:外观模式提供了一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用.因为有了外观,客户的工作将更加快捷简便. 组件建立后,将会组装于外观中,并直接将外观派发给客户,方便使用,因此外观模式简化了组件中的一系列接口,方便客户的操作.外观将客户从一个复杂的子系统中解耦. 阅读全文
posted @ 2016-06-19 09:59 hlhdidi 阅读(147) 评论(0) 推荐(0)
摘要:适配器模式将一个类的接口,转化为客户期望的另一个接口.适配器让原本接口不兼容的类可以合作无间. 适配器的设计首先需要实现想转化成的类型接口,接着需要取得要适配的对象引用,可以利用构造器取得这个引用,然后可以用被适配的对象去实现需要实现的类型接口的方法. 客户使用适配器的过程如下: 1.客户通过目标接 阅读全文
posted @ 2016-06-19 09:33 hlhdidi 阅读(222) 评论(0) 推荐(0)
摘要:命令模式将请求封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象,命令模式也支持可撤销的操作.当需要将发出请求的对象和执行请求的对象解耦的时候,采用命令模式. 命令模式中有几个名词:调用者,命令,接受者,客户.客户负责创建命令和调用者,调用者将命令封装在自己里面,当客户需要执行某些操作的时 阅读全文
posted @ 2016-06-19 09:08 hlhdidi 阅读(196) 评论(0) 推荐(0)
摘要:单例设计模式,它确保一个类只有一个实例,并提供一个全局访问点. 由于单例设计模式对应的类只能创建一个对象,因此它所对应的方法必须是static(不是static只有创建对象才能调用). 以下是单例模式的一个经典实现:采用了延迟加载对象的例子. 但是上述实现有个重要的缺点,在多线程环境下是可能产生两个 阅读全文
posted @ 2016-06-18 23:20 hlhdidi 阅读(211) 评论(0) 推荐(0)
摘要:一.简单工厂模式. 通常情况下,在代码中需要创建一系列对象的时候,如果需要创建新的同类型的对象,就需要对原代码进行修改,此时就不符合对修改关闭的原则,因此,我们将创建对象于使用对象的代码分隔开来,在工厂类中创建工厂,然后如果需要新的对象,只需要修改工厂的类即可. 二.工厂方法模式. 工厂方法模式定义 阅读全文
posted @ 2016-06-18 22:53 hlhdidi 阅读(203) 评论(0) 推荐(0)
摘要:装饰者模式将责任附加在对象上,若要扩展功能,装饰者提供了比继承更加有弹性的替代方案. 采用装饰者模式的时候,需要注意以下几点: 在Java中,装饰者模式最直接的体现就是IO包里的,例如,LineNumberInputStream ll=new LineNumberInputStream(new Bu 阅读全文
posted @ 2016-06-18 20:18 hlhdidi 阅读(232) 评论(0) 推荐(0)
摘要:观察者模式定义了对象之间的一对多的依赖,这样一来,当一个对象的状态发生改变的时候,它的所有依赖者都会收到通知,并且进行更新. 被观测的对象称为主题(Subject),观察被观测的对象的对象称为观察者(Observer). 现实中的观察者模式:例如报纸的订阅.不同人(Observer)向报社(Subj 阅读全文
posted @ 2016-06-18 17:42 hlhdidi 阅读(213) 评论(0) 推荐(0)
摘要:△策略模式用于在用户行为经常发生变化的情况下,将行为单独提取出来,定义算法族,采用组合的方式,分别封装起来,让他们可以互相替换,此模式,让算法的变化独立于使用算法的客户。 该模式体现了如下设计模式的原则: 在策略模式中,第一点体现了对于类中变化的部分,进行了封装,第二部分体现了将算法族的接口定义在类 阅读全文
posted @ 2016-06-18 16:29 hlhdidi 阅读(256) 评论(0) 推荐(0)
摘要:△子父类涉及的异常问题: 1.子类在覆盖方法时,父类的方法如果抛出了异常,那么子类的方法只能抛出父类的异常或者该异常的子类,且只能抛出异常的子集 2.如果父类抛出了多个异常,子类只能抛出父类异常的子集,如果父类的方法没有抛出异常,那么子类重写方法时一定不能抛,只能捕捉 △throw和throws: 阅读全文
posted @ 2016-06-18 10:54 hlhdidi 阅读(186) 评论(0) 推荐(0)
摘要:△单例类是指只有一个实例,而枚举类实际上就是有有限个实例的类,在类里已经把实例定义好了。 △枚举类的三种创建形式: 1) 2) 3) △枚举类的注意事项: * 定义枚举类要用关键字enum * 所有枚举类都是Enum的子类 * 枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如 阅读全文
posted @ 2016-06-11 22:03 hlhdidi 阅读(164) 评论(0) 推荐(0)
摘要:△用鼠标点击生成的java源文件,按下F4可以观察类的生成的层次结构 △window-showreview:可以显示命令窗口. window-perspective-reset:可以将打乱的命令窗口重置 △alt+/:输入for,按下:可以直接生成for语句;输入syso按下即可变成输出语句 △wi 阅读全文
posted @ 2016-06-11 21:50 hlhdidi 阅读(163) 评论(0) 推荐(0)
摘要:在学习动态代理的过程中,发现动态代理代理的类必须需要实现一个接口,此外,处理器中的invoke方法,在对代理产生的对象调用任何方法的时候,均会执行,但是method代表的是“对应与在代理实例上调用的接口的方法的Method实例”,因此Method对象调用,仅在调用接口方法的情况下,有结果,对于以下示 阅读全文
posted @ 2016-06-11 20:40 hlhdidi 阅读(506) 评论(0) 推荐(0)
摘要:对于内部类的概念一直理解的不是很深刻,今天下午看了一下一些大牛的博客,结合《core Java》这本书对于内部类的描写(占了一章的较大的篇幅),将知识点总结如下: 基础知识:内部类定义在一个类的内部,可以无视私有权限的访问外部类的变量。内部类分为两种: 1.类中内部类(私有内部类,静态内部类) 2. 阅读全文
posted @ 2016-06-11 17:28 hlhdidi 阅读(1026) 评论(0) 推荐(0)
摘要:最近在看core Java,里面涉及到的对于编写equals方法以及继承时,可能会发生的错误做出了详细的介绍,看完后觉得有点意外,因为在看教学视频时,并没有涉及到如此多的重点,现在将要点提取出来整理如下: Java语言对于equals方法的要求如下: △自反性:对于任何非空引用x,x.equals( 阅读全文
posted @ 2016-06-11 10:51 hlhdidi 阅读(604) 评论(0) 推荐(0)
摘要:△abstract不可以修饰成员变量 △一个类可以没有抽象方法,可以定义为抽象类,这样的目的是不能让其他类建立本类对象,交给子类完成. △abstract和static(可以被类名调用方法,但是抽象方法调用没有意义)final(不能被覆盖方法)private(私有方法无法覆盖) △接口只能被实现.被 阅读全文
posted @ 2016-06-11 10:09 hlhdidi 阅读(292) 评论(0) 推荐(0)
摘要:△先默认初始化,在显示初始化,在构造函数初始化 △继承的弊端:代码的耦合性增加了. △子类不能继承父类的构造方法. △子类会拥有父类的私有成员变量,但是必须通过get,set方法访问. △super不是一个对象的引用,不能将super赋给另一个对象变量,它只是一个指示编译器调用超类方法的特殊关键字. 阅读全文
posted @ 2016-06-10 23:02 hlhdidi 阅读(206) 评论(0) 推荐(0)
摘要:△java中的制表符.'\t'制表符."\t"也可以. △方法内不能再定义一个方法,互相平级. △数组中boolean类型的变量默认为false;char默认为'\u0000'(\u是unicode 的一种标识,标识16进制) △int [ ]a=new int[4]{1,2,3,4};非法 int 阅读全文
posted @ 2016-06-10 21:35 hlhdidi 阅读(172) 评论(0) 推荐(0)
摘要:△.代表在当前目录.classpath能在任何路径下访问类文件. △单行注释可以嵌套,多行注释不能嵌套 △java中的标识符只能有数字,字母,$和_,其他的符号都是错误的,不合法的.其中数字不能是开头. △快捷打开命令窗口.按住shift,右键此处打开命令窗口. △跨平台原理:只要在需要运行java 阅读全文
posted @ 2016-06-10 21:32 hlhdidi 阅读(417) 评论(0) 推荐(0)