JAVA基础
文章平均质量分 93
IdealSpring
为了面包和牛奶......
展开
-
抽象类和接口的区别
抽象类和接口的区别1. 成员区别抽象类:成员变量:可以是变量,也可以是常量。构造方法:有。成员方法:可以是抽象,也可以是非抽象。接口:成员变量:只可以是常量。构造方法:无。成员变量:只可以是抽象,在JDK1.8之后使用default关键字的方法可以是非抽象。2. 关系区别类与类:继承,da单继承。类与接口:实现,单实现或多实现。接口与接口:继承,单继承或多继承。...原创 2019-02-22 10:08:16 · 304 阅读 · 0 评论 -
浅谈Java设计模式——建造者模式(Builder)
一、概述 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 建造者模式将复杂产品的构建过程封装分解在不同的方法中,使得创建过程非常清晰,能够让我们更加精确的控制复杂产品对象的创建过程,同时它隔离了复杂产品对象的创建和使用,使得相同的创建过程能够创建不同的产品。但是如果某个产品的内部结构过于复杂,将会导致整个系统变得非常庞大,不利于控制,...原创 2018-11-12 12:31:48 · 804 阅读 · 0 评论 -
浅谈Java设计模式——外观模式(facade)
一、概述 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。我们都知道类与类之间的耦合越低,那么可复用性就越好,如果两个类不必彼此通信,那么就不要让这两个类发生直接的相互关系,如果需要调用里面的方法,可以通过第三者来转发调用。外观模式非常好的诠释了这段话。外观模式提供了一个统一的接口,用来访问子系统中的一群接口。它让一...原创 2018-11-15 20:41:38 · 709 阅读 · 0 评论 -
浅谈Java设计模式——组合模式(Composite)
一、概述 将对象组合成树形结构以表示"部分-整体"的层次结构。"Composite使得用户对单个对象和组合对象的使用具有一致性。它定义了如何将容器对象和叶子对象进行递归组合,使得客户在使用的过程中无须进行区分,可以对他们进行一致的处理。在使用组合模式中需要注意一点也是组合模式最关键的地方:叶子对象和组合对象实现相同的接口。这就是组合模式能够将叶子节点和对象节点进行一致处理的原因。...原创 2018-11-15 19:41:35 · 752 阅读 · 0 评论 -
Collection容器家族(TreeSet源码详解)
一、在Collection集合体系中的位置及概述 TreeSet继承自AbstractSet抽象类,实现了NavigableSet、Serializable、Cloneable、RandomAccess接口。它的特点是存储元素唯一,无序(输入和输出无序)。 TreeSet默认情况下是基于TreeMap实现的,是对TreeMap的封装。默认情况下和TreeMap一样,采用元素的内...原创 2018-11-08 18:55:10 · 226 阅读 · 0 评论 -
浅谈Java设计模式——适配器模式(Adapter)
一、概述 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。在我们的应用程序中我们可能需要将两个不同接口的类来进行通信,在不修改这两个的前提下我们可能会需要某个中间件来完成这个衔接的过程。这个中间件就是适配器。所谓适配器模式就是将一个类的接口,转换成客户期望的另一个接口。它可以让原本两个不兼容的接口能够无缝完成...原创 2018-11-13 21:33:16 · 273 阅读 · 0 评论 -
浅谈Java设计模式——桥接模式(Bridge)
一、概述 将抽象部分与它的实现部分分离,使它们都可以独立地变化。如果说某个系统能够从多个角度来进行分类,且每一种分类都可能会变化,那么我们需要做的就是讲这多个角度分离出来,使得他们能独立变化,减少他们之间的耦合,这个分离过程就使用了桥接模式。所谓桥接模式就是讲抽象部分和实现部分隔离开来,使得他们能够独立变化。桥接模式将继承关系转化成关联关系,封装了变化,完成了解耦,减少了系统中类...原创 2018-11-13 20:21:48 · 1163 阅读 · 0 评论 -
Collection容器家族(LinkedHashSet源码详解)
一、在Collection集合体系中的位置及概述 LinkedHashSet 是非同步的有序的,分别是插入顺序和访问顺序,LinkedHashSet的有序性可参考LinkedHashMap的有序性,继承于HashSet,内部基于LinkedHashMap实现的,也就是说LinkedHashSet和HashSet一样只存储一个值,LinkedHashSet和LinkedHashMa...原创 2018-11-08 11:58:55 · 196 阅读 · 0 评论 -
浅谈Java设计模式——策略模式(Strategy)
一、概述 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。策略模式就是定义了算法族,分别封装起来,让他们之前可以互相转换,此模式然该算法的变化独立于使用算法的客户。在策略模式中它将这些解决问题的方法定义成一个算法群,每一个方法都对应着一个具体的算法,这里的一个算法我就称之为一个策略。虽然策略模式定义了算法,但是它并不...原创 2018-11-13 19:04:26 · 404 阅读 · 0 评论 -
浅谈Java设计模式——代理模式(Proxy)
一、概述 为其他对象提供一种代理以控制对这个对象的访问。代理模式就是给一个对象提供一个代理,并由代理对象控制对原对象的引用。它使得客户不能直接与真正的目标对象通信。代理对象是目标对象的代表,其他需要与这个目标对象打交道的操作都是和这个代理对象在交涉。代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了的作用和保护了目标对象的,同时也在一定程度上面减少了系统的耦合度。...原创 2018-11-13 16:53:31 · 302 阅读 · 0 评论 -
浅谈Java设计模式——抽象工厂模式(AbstractFactory)
一、对比简单工厂模式、工厂方法模式 简单工厂模式只通过一个工厂类,通过给定参数返回相应的实例对象。工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。 普通工厂产出是一个产品(实例),抽象工厂产出是一个抽象(接口)二、概述 提供一个创建一系列相关或相互依赖对象的接口,而无需...原创 2018-11-11 13:15:59 · 469 阅读 · 0 评论 -
Collection容器家族(HashSet源码详解)
一、在Collection集合体系中的位置及概述 HashSet继承自AbstractSet抽象类,实现了Cloneable、Serializable接口,显示的实现了Set接口。至于为什么显示的实现Set接口,我前面的文章讲过。 HashSet而言,它是基于HashMap实现的,本质上讲HashSet底层实现是HashMap的封装类对象,HashSet的所有操作...原创 2018-11-07 21:37:37 · 267 阅读 · 0 评论 -
浅谈Java设计模式——原型模式(Prototype)
一、概述 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。二、使用场景1.当一个系统应该独立于它的产品创建、构成和表示时。2.当要实例化的类是在运行时刻指定时,例如,通过动态装载。 3.为了避免创建一个与产品类层次平行的工厂类层次时。 4.当一个类的实例只能有几个不同状态组合中的一种时。 在我们应用程序可能有某些对象的结构比...原创 2018-11-12 14:41:37 · 266 阅读 · 0 评论 -
浅谈Java设计模式——观察者模式(Observer)
一、概述 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。观察者模式定义了对象之间的一对多依赖关系,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并且自动更新。在这里,发生改变的对象称之为观察目标,而被通知的对象称之为观察者。一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,所以么可以根据需要增加和...原创 2018-11-18 19:07:12 · 296 阅读 · 0 评论 -
浅谈Java设计模式——装饰模式(Decorator)
一、概述 动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。二、使用场景1.在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。 2.处理那些可以撤消的职责。 3.当不能采用生成子类的方法进行扩充时。三、参与者1.Component 定义一个对象接口,可以给这些对象动态地添加职责。 2.Co...原创 2018-11-12 20:28:14 · 277 阅读 · 0 评论 -
浅谈Java设计模式——职责链模式(Chain Of Responsibility)
一、概述 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链, 并沿着这条链传递该请求,直到有一个对象处理它为止。 这一模式的想法是,给多个对象处理一个请求的机会,从而解耦发送者和接受者。 职责链模式描述的请求如何沿着对象所组成的链来传递的。它将对象组成一条链,发送者将请求发给链的第一个接收者,并且沿着这条链传递,直到...原创 2018-11-20 13:11:36 · 268 阅读 · 0 评论 -
浅谈Java设计模式——状态模式(State)
一、概述 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。在很多情况下我们对象的行为依赖于它的一个或者多个变化的属性,这些可变的属性我们称之为状态,也就是说行为依赖状态,即当该对象因为在外部的互动而导致他的状态发生变化,从而它的行为也会做出相应的变化。对于这种情况,我们是不能用行为来控制状态的变化,而应该站在状态的角度来思考...原创 2018-11-19 21:52:38 · 1243 阅读 · 1 评论 -
浅谈Java设计模式——解释器模式(Interpreter)
一、概述 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。解释器模式描述了如何构成一个简单的语言解释器,主要应用在使用面向对象语言开发的编译器中。它描述了如何为简单的语言定义一个文法,如何在该语言中表示一个句子,以及如何解释这些句子。二、使用场景当有一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象语法树时,可使 ...原创 2018-11-19 20:17:27 · 423 阅读 · 0 评论 -
浅谈Java设计模式——备忘录模式(Memento)
一、概述 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。它实现了对信息的封装,使得客户不需要关心状态保存的细节。保存就要消耗资源,所以备忘录模式的缺点就在于消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。二、使用场景1.必须保存一个对象在某一个时刻的(部分)状...原创 2018-11-19 17:49:26 · 345 阅读 · 0 评论 -
浅谈Java设计模式——中介者模式(Mediator)
一、概述 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介对象用来封装对象之间的关系,各个对象可以不需要知道具体的信息通过中介者对象就可以实现相互通信。它减少了对象之间的互相关系,提供了系统可复用性,简化了系统的结构。各个对象不需要互相知道了解,他们只需要知道中介者对象即可,但是中介者对象就必须要知...原创 2018-11-19 15:08:34 · 628 阅读 · 0 评论 -
浅谈Java设计模式——迭代器模式(Iterator)
一、概述 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。二、使用场景1.访问一个聚合对象的内容而无需暴露它的内部表示。 2.支持对聚合对象的多种遍历。 3.为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代)。三、参与者1.Iterator 迭代器定义访问和遍历元素的接口。 2.ConcreteI...原创 2018-11-16 21:31:25 · 363 阅读 · 0 评论 -
浅谈Java设计模式——命令模式(Command)
一、概述 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。有些时候我们想某个对象发送一个请求,但是我们并不知道该请求的具体接收者是谁,具体的处理过程是如何的,们只知道在程序运行中指定具体的请求接收者即可,对于这样将请求封装成对象的我们称之为命令模式。所以命令模式将请求封装成对象,以便使用不同的请求、队列或者日志来参...原创 2018-11-16 20:09:06 · 918 阅读 · 0 评论 -
浅谈Java设计模式——模板方法模式(TemplateMethod)
一、概述 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。 TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。有些时候我们做某几件事情的步骤都差不多,仅有那么一小点的不同,在软件开发的世界里同样如此,如果我们都将这些步骤都一一做的话,费时费力不讨好。所以我们可以将这些步骤分解、封装起来,然后利用继承的方式来继承即可,当然不同的...原创 2018-11-16 19:25:40 · 390 阅读 · 0 评论 -
浅谈Java设计模式——享元模式(Flyweight)
一、概述 运用共享技术有效地支持大量细粒度的对象。在一个系统中对象会使得内存占用过多,特别是那些大量重复的对象,这就是对系统资源的极大浪费。享元模式对对象的重用提供了一种解决方案,它使用共享技术对相同或者相似对象实现重用。享元模式就是运行共享技术有效地支持大量细粒度对象的复用。系统使用少量对象,而且这些都比较相似,状态变化小,可以实现对象的多次复用。这里有一点要注意:享元模式要求...原创 2018-11-16 16:23:05 · 1090 阅读 · 0 评论 -
浅谈Java设计模式——总体概要(GeneralOverview——Table Of Contents)
一、什么是设计模式 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,...原创 2018-11-20 16:26:59 · 360 阅读 · 0 评论 -
浅谈Java设计模式——访问者模式(Visitor)
一、概述 表示一个作用于某对象结构中的各元素的操作。 它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式的目的是封装一些施加于某种数据结构元素之上的操作,一旦这些操作需要修改的话,接受这个操作的数据结构可以保持不变。为不同类型的元素提供多种访问操作方式,且可以在不修改原有系统的情况下增加新的操作方式。同时我们还需要明确一点那就是访问者模式是适用于那些数据结...原创 2018-11-20 16:18:50 · 637 阅读 · 0 评论 -
浅谈Java设计模式——工厂方法模式(FactoryMethod)
一、概述 定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。二、使用场景1.当一个类不知道它所必须创建的对象的类的时候。 2.当一个类希望由它的子类来指定它所创建的对象的时候。3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。三、类图四、...原创 2018-11-10 21:33:47 · 287 阅读 · 0 评论 -
浅谈Java设计模式——简单工厂模式(SimpleFactory)
一、定义 通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。二、类图三、理解 Operation为抽象类,它定义了一个抽象方法getResult;OperationAdd和OperationSubtraction两个类为Operation的子类,实现了它的getResult方法,OperationAdd为加法类,Operat...原创 2018-11-10 18:29:00 · 518 阅读 · 0 评论 -
Collection容器家族(LinkedList源码详解)
一、LinkedList在Collection集合体系中的位置 Linked:链表,List:线性表;加在一起,就能理解出LinkedList集合,底层是以链表为存储结构的集合,不过这个链表是双向链表。LinkedList是由AbstractSequentialList超类特化而来。AbstractSequentialList前面有讲过,他就是一个简洁的基于迭代的线性表,去除...原创 2018-09-09 17:47:12 · 241 阅读 · 0 评论 -
Collection容器家族(读完ArrayList源码---小测试:自定义具有ArrayList各项功能的实现类)
前面的几篇文章对ArrayList的超类和本身以及接口进行了讲解,为了更加深入理解ArrayList集合使用数组存储数据的思想,特意实现了一个自定义的MyArrayList,源码如下:/** * 自定义ArrayList集合 * @param <E> */public class MyArrayList<E> implements Iterab...原创 2018-08-24 14:11:57 · 197 阅读 · 0 评论 -
Collection容器家族(ArrayList源码详解)
一.ArrayList在Colection集合体系中的位置及概述 ArrayList理解起来很简单,Array数组 阵列的意思、List线性表 列表,加在一起就是数组去实现线性表的一个实现类。ArrayList是由AbstractList超类特化而来。在功能上实现了add, get, set, remove等与存储结构相关的方法,我们重点理解这些功能。 Ar...原创 2018-08-22 10:54:59 · 250 阅读 · 0 评论 -
Collection容器家族(AbstractList超类和AbstractSequentialList超类)
AbstractList超类一、在Collection容器集合中的位置及作用 Collection集合体系有两大分支,一个是List分支、另一个是Set分支,Collection是这两大分支超类;这两个分支都由接口去约束,每个几口都有其实现类,而AbstractList抽象类就是List分支的顶层超类。此类提供了List接口的骨干实现,以最大限度地减少实现由“随机访问”数...原创 2018-08-20 14:49:43 · 779 阅读 · 2 评论 -
Collection容器家族(AbstractCollection超类)
一、AbstractCollection超类位置及概述 四个超类AbstractCollection、 AbstractSet 、AbstractList、AbstractSequentialList。AbstractCollection、 AbstractSet 、AbbstractList根据名字就可以知道,他们分别对Collection,Set、List接口进行了实现,但...原创 2018-08-18 21:40:56 · 362 阅读 · 0 评论 -
Collection容器家族(Iterable接口、Collection接口、List接口、Set接口)
一、什么是接口? 接口中定义的是该继承体系中的扩展功能。举个例子:(猫狗案例) 狗一般就是看门,猫一般就是作为宠物了。但是,现在有很多的驯养员或者是驯兽师,可以训练出:猫钻火圈,狗跳高,狗做计算等。而这些额外的动作,并不是所有猫或者狗一开始就具备的,这应该属于经过特殊的培训训练出来的。所以,这些额外的动作定义到动物类中就不合适,也不适合直接定义到猫或者狗中...原创 2018-08-17 14:10:11 · 1378 阅读 · 0 评论 -
Stream的创建以及使用
一、描述 JKD1.8新增的接口,可以实现对数组、集合等类似于spark算子的所有操作。二、创建Stream对象 // 1.通过数组创建 String[] arr = {"a", "b", "c", "d", "e"}; Stream<String> streamArr = Stream.of(arr);原创 2018-08-17 13:31:04 · 528 阅读 · 0 评论 -
Lambda表达式
1.概述 Lambda表达式是jdk1.8的新特性之一,他可以极大程度简化代码,减少代码量,常用于java中接口式匿名内部类。Lambda允许把函数作为一个方法的参数(函数作为参数传递到方法中),或者把代码看成数据。2.定义 只有一个方法的匿名内部函数是函数式接口,它可以被隐式转换成Lambda表达式。 只有一个抽象方法(Object类中方...原创 2018-08-16 20:13:04 · 162 阅读 · 0 评论 -
java中数组与集合相互转化
一、数组转化成集合 使用Arrays.asList(T... a)方法,将数组转换成List集合。 代码实例: package cn.ccut;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Demo { p...原创 2018-08-07 10:19:17 · 806 阅读 · 0 评论 -
2.Java.util包之Scanner类
一、Scanner类的继承关系图 Scanner类继承自Object类,实现了Interator、Closeable两个接口。 Object类:java中所有类的超类。 Interator接口:对 collection 进行迭代的迭代器。 Closeable接口:是可以关闭的数据源或目标。调用 close 方法可释...原创 2018-08-06 08:21:55 · 465 阅读 · 0 评论 -
二分查找算法(Java实现)
二分查找也称折半查找(Binary Search),它的查找效率很好。二分查找有一个要求是必须采用顺序存储结构,而且表种的元素是有序的。只有满足这个条件我们才能使用二分查找。 查找条件: 查找区域的左边界,小于等于查找区域的右边界 查找过程: 1. 循环条件 == 查找条件 2.计算序列中间下标位置 ...原创 2018-08-04 18:49:25 · 397 阅读 · 0 评论 -
Collection容器家族(读完LinkedList源码---小测试:自定义具有LinkedList各项功能的实现类)
前面的几篇文章对LinkedList的超类和本身以及接口进行了讲解,为了更加深入理解LinkedList集合使用存储数据的思想,特意实现了一个自定义的MyLinkedList,源码如下:(如有错误,还望多多指教import java.util.Iterator;import java.util.NoSuchElementException;import java.util...原创 2018-09-10 12:59:07 · 209 阅读 · 0 评论