- 博客(100)
- 资源 (3)
- 收藏
- 关注
原创 Java与设计模式(十五)结构型--适配器模式
一概述二定义三对象适配器模式角色四适配器模式总结主要优点类适配器模式优点对象适配器模式优点主要缺点适用场景一、概述适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。在适配器模式中引入了一个被称为适配器(Adapter)的包装类,而它所包装的对象称为适配者(Adapte
2018-01-22 19:10:31
227
原创 Java与设计模式(十四)创建型--原型模式
一原型模式概述二原型模式角色三原型模式总结主要优点主要缺点适用场景一、原型模式概述在使用原型模式时,我们需要首先创建一个原型对象,再通过复制这个原型对象来创建更多同类型的对象。试想,如果连孙悟空的模样都不知道,怎么拔毛变小猴子呢?原型模式的定义如下: 原型模式(Prototype Pattern):使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
2018-01-19 14:50:18
257
原创 Java与设计模式(十三)创建型--建造者模式
一建造者模式概述二建造者模式定义三建造者模式角色四建造者模式代码示例五建造者模式总结主要优点主要缺点适用场景没有人买车会只买一个轮胎或者方向盘,大家买的都是一辆包含轮胎、方向盘和发动机等多个部件的完整汽车。如何将这些部件组装成一辆完整的汽车并返回给用户,这是建造者模式需要解决的问题。建造者模式又称为生成器模式,它是一种较为复杂、使用频率也相对较低的创建型模式。建造者模
2018-01-19 14:34:43
306
原创 Java与设计模式(十二)创建型--单例模式
一单例模式的动机二类图三代码示例四单例模式的几种实现方式懒汉式线程不安全懒汉式线程安全饿汉式双检锁双重校验锁DCL即 double-checked locking登记式静态内部类枚举使用经验五单例模式总结主要优点主要缺点适用场景六单例模式与垃圾回收一、单例模式的动机对于一个软件系统的某些类而言,我们无须创建多个实例。举个大家都熟知的例子——
2018-01-17 20:14:37
287
原创 Java与设计模式(十一)创建型--抽象工厂模式
一需求二产品等级结构与产品族三抽象工厂模式概述抽象工厂模式定义抽象工厂模式中的角色抽象工厂模式代码示例四抽象工厂模式总结主要优点主要缺点适用场景工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,我们可以考虑将一些相关的产品组成一个
2018-01-17 19:31:14
271
原创 Java与设计模式(十)创建型--工厂方法模式
一需求二工厂方法模式概述工厂方法模式定义工厂方法模式中的角色工厂方法模式代码示例三需求优化四工厂方法模式总结主要优点主要缺点适用场景简单工厂模式虽然简单,但存在一个很严重的问题。当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,将违背“开闭原则”,如何实现增加新产品而不影响已有代码?一、需求
2018-01-17 16:57:52
250
原创 Java与设计模式(九)创建型--简单工厂模式
一需求二简单工厂模式概述简单工厂模式流程简单工厂模式定义简单工厂模式中的角色简单工厂模式代码示例三需求优化四 简单工厂模式总结主要优点主要缺点使用场景一、需求比如我想开发一套图表库,该图表库可以为应用系统提供各种不同外观的图表,例如柱状图、饼状图、折线图等,那我们可以这样写。代码如下:package demo.com.test.shejimosh
2018-01-17 15:39:26
240
原创 Java与设计模式(八)设计原则--开闭原则
一定义一、定义开闭原则是面向对象的可复用设计的第一块基石,它是最重要的面向对象设计原则。开闭原则由Bertrand Meyer于1988年提出,其定义如下: 开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。在开闭原则的定义中,软件实体可以指一个软件模块、一个由多个类
2018-01-15 19:46:13
239
原创 Java与设计模式(七)设计原则--迪米特法则(最少知道原则)
一定义二代码示例一、定义迪米特法则来自于1987年美国东北大学(Northeastern University)一个名为“Demeter”的研究项目。迪米特法则又称为最少知识原则(LeastKnowledge Principle, LKP),其定义如下: 迪米特法则(Law of Demeter, LoD):一个软件实体应当尽可能少地与其他实体发生相互作用。如果一个系统
2018-01-15 19:27:36
515
原创 Java与设计模式(六)设计原则--接口隔离原则
一定义一、定义接口隔离原则定义如下: 接口隔离原则(Interface Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。根据接口隔离原则,当一个接口太大时,我们需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。每一个接口应该承担一种相对独立的角色,不干不该干
2018-01-15 19:05:14
291
原创 Java与设计模式(五)设计原则--依赖倒置原则
一定义一、定义如果说开闭原则是面向对象设计的目标的话,那么依赖倒转原则就是面向对象设计的主要实现机制之一,它是系统抽象化的具体实现。依赖倒转原则是Robert C. Martin在1996年为“C++Reporter”所写的专栏Engineering Notebook的第三篇,后来加入到他在2002年出版的经典著作“Agile Software Development, Pri
2018-01-15 18:54:34
274
原创 Java与设计模式(四)设计原则--里氏代换原则
一定义一、定义里氏代换原则由2008年图灵奖得主、美国第一位计算机科学女博士Barbara Liskov教授和卡内基·梅隆大学Jeannette Wing教授于1994年提出。其严格表述如下:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1代换o2时,程序P的行为没有变化,那么类型S是类型T的子类型。这个定义比较拗口且难以理解,因
2018-01-15 18:47:49
265
原创 Java与设计模式(三)设计原则--单一职责原则
一定义二单一职责优点一、定义单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小。单一职责原则定义如下: 单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。单一职责原则告诉我们:一个类不能太“累”!在软件系统中,一个类(大到模
2018-01-15 17:54:30
250
原创 Java与设计模式(二)类之间的关系
概述一依赖关系Dependence二关联关系Association三聚合Aggregation四组合Composition五继承Generalization六实现Implementation七总结概述1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。2) 在系统中,每个类具有一定的职责,职责指的是类
2018-01-15 17:39:17
342
原创 Java与设计模式(一)设计模式概述
一设计模式的由来设计模式从何而来软件工程中的设计模式二设计模式是什么what三为什么用设计模式why四怎样学习设计模式how一、设计模式的由来设计模式从何而来在介绍设计模式的起源之前,我们先要了解一下模式的诞生与发展。与很多软件工程技术一样,模式起源于建筑领域,毕竟与只有几十年历史的软件工程相比,已经拥有几千年沉淀的建筑工程有太多值得学习和借鉴的地方。 那
2018-01-15 14:29:50
305
原创 Java线程池--ThreadPoolExecutor
一线程池简介二ThreadPoolExecutor简介三ThreadPoolExecutor类图四ThreadPoolExecutor主要属性五线程池使用示例六线程池调度过程七线程池的状态八线程池拒绝策略线程池拒绝策略简介拒绝策略案例九源码分析A创建并初始化线程池ThreadPoolExecutorExecutorsdefaultThreadFactorydefau
2018-01-10 18:19:04
621
原创 Java集合类(二十二)JUC中的集合--ConcurrentLinkedQueue
一ConcurrentLinkedQueue介绍二ConcurrentLinkedQueue原理和数据结构三ConcurrentLinkedQueue函数列表四ConcurrentLinkedQueue源码分析创建添加删除一、ConcurrentLinkedQueue介绍ConcurrentLinkedQueue是线程安全的队列,它适用于“高并发”的场景。 它是一
2018-01-10 14:16:33
364
原创 Java集合类(二十一)JUC中的集合--LinkedBlockingDeque
一LinkedBlockingDeque介绍二LinkedBlockingDeque原理和数据结构三LinkedBlockingDeque函数列表四LinkedBlockingDeque源码分析创建添加删除遍历一、LinkedBlockingDeque介绍LinkedBlockingDeque是双向链表实现的双向并发阻塞队列。该阻塞队列同时支持FIFO和FIL
2018-01-10 14:06:11
345
原创 Java集合类(二十)JUC中的集合--LinkedBlockingQueue
一LinkedBlockingQueue介绍二LinkedBlockingQueue原理和数据结构三LinkedBlockingQueue函数列表四LinkedBlockingQueue源码分析创建添加取出遍历一、LinkedBlockingQueue介绍LinkedBlockingQueue是一个单向链表实现的阻塞队列。该队列按 FIFO(先进先出)排序元素
2018-01-10 13:59:05
332
转载 Java集合类(十九)JUC中的集合--ArrayBlockingQueue
一ArrayBlockingQueue介绍二ArrayBlockingQueue原理和数据结构三ArrayBlockingQueue函数列表四ArrayBlockingQueue源码分析构造函数添加取出遍历一、ArrayBlockingQueue介绍ArrayBlockingQueue是数组实现的线程安全的有界的阻塞队列。 线程安全: 是指,ArrayBlo
2018-01-10 11:55:06
320
转载 Java集合类(十八)JUC中的集合--ConcurrentSkipListMap
一ConcurrentSkipListMap介绍二ConcurrentSkipListMap原理和数据结构三ConcurrentSkipListMap函数列表四ConcurrentSkipListMap源码分析添加删除获取一、ConcurrentSkipListMap介绍ConcurrentSkipListMap是线程安全的有序的哈希表,适用于高并发的场景。
2018-01-10 10:27:53
319
原创 Java集合类(十七)JUC中的集合--ConcurrentHashMap jdk1.8
一ConcurrentHashMap8简介二ConcurrentHashMap8基本属性三ConcurrentHashMap8数据结构四ConcurrentHashMap8内部类NodeTreeNodeTreeBinForwardingNode五Unsafe与CASunsafe静态块三个核心方法六扩容方法 transfer单线程扩容多线程扩容七Put方法a
2018-01-08 20:15:30
784
原创 Java集合类(十六)JUC中的集合--ConcurrentHashMap jdk1.7
一ConcurrentHashMap介绍二ConcurrentHashMap原理和数据结构三锁分段简介四ConcurrentHashMap函数列表五ConcurrentHashMap源码分析a构造函数b获取get读取的线程安全性c增加put扩容rehashd删除deletee获取size六总结一、ConcurrentHashMap介绍Conc
2018-01-08 15:25:29
426
原创 Java集合类(十五)JUC中的集合--CopyOnWriteArraySet
一CopyOnWriteArraySet介绍二CopyOnWriteArraySet原理和数据结构三CopyOnWriteArraySet函数列表四CopyOnWriteArraySet源码一、CopyOnWriteArraySet介绍它是线程安全的无序的集合,可以将它理解成线程安全的HashSet。有意思的是,CopyOnWriteArraySet和HashSet虽然都继
2018-01-08 11:19:11
489
原创 Java集合类(十四)JUC中的集合--CopyOnWriteArrayList
一CopyOnWriteArrayList介绍二CopyOnWriteArrayList原理和数据结构三CopyOnWriteArrayList源码分析创建添加获取删除遍历一、CopyOnWriteArrayList介绍它相当于线程安全的ArrayList。和ArrayList一样,它是个可变数组;但是和ArrayList不同的时,它具有以下特性: 1. 它最适
2018-01-06 18:35:52
333
原创 Java集合类(十三)JUC中的集合概述
一概述二线程安全级别三绝对线程安全类一、概述我们在Java集合类(一)概览 里已经介绍了 非线程安全的集合(Vector、List、Set、Map),下面几篇文章将介绍线程安全的集合。可能有人会问hashTable,Vector不是线程安全的类吗?下面看一段代码:package demo.com.test.collection;import java.util.
2018-01-06 17:34:36
722
原创 Java集合类(十二)HashSet
一定义二方法三总结一、定义public class HashSetE> extends AbstractSetE> implements SetE>, Cloneable, java.io.Serializable HashSet继承AbstractSet类,实现Set、Cloneable、Serializable接口。其中AbstractSet提
2018-01-06 16:19:35
235
原创 Java集合类(十一)Map总结
一、Map总结二、区别三、面试面试时考官会问,两个使用相近类的异同,比如hashMap,hashTable。那我们总那几方面回答呢? 1.继承的类 2.底层使用的数据结构 3.线程安全性四、Map优化首先我们这样假设,假设哈希映射的内部数组的大小只有1,所有的元素都将映射该位置(0),从而构成一条较长的链表。由于我们更新、访问都要对这条链表进行线性搜索
2018-01-06 16:02:32
267
原创 Java集合类(十)TreeMap
一红黑树简介二TreeMap数据结构三TreeMap put方法红黑树增加节点TreeMap put方法实现分析四TreeMap delete方法红黑树删除节点红黑树删除节点总结TreeMap deleteEntry方法实现分析TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解. 1、红黑树的基本概念。
2018-01-05 18:38:33
379
原创 Java集合类(九)HashTable
一定义二构造方法三主要方法四HashTable与HashMap的区别一、定义HashTable在Java中的定义如下:public class HashtableK,V> extends DictionaryK,V> implements MapK,V>, Cloneable, java.io.Serializable 从中可以看出Has
2018-01-05 09:54:19
316
原创 Java集合类(八)HashMap1.8
一、HashMap存储结构二、HashMap分析1. 确定哈希桶数组索引位置2. 分析HashMap的put方法3. 扩容机制1.7的扩容代码:1.8的扩容代码1.8的扩容优化4.线程安全性三、小结一、HashMap存储结构从结构实现来讲,HashMap是数组+链表+红黑树实现的,如下如所示。这里需要讲明白两个问题:数据底层具体存储的是什么...
2018-01-04 19:56:08
815
1
原创 Java集合类(七)HashMap1.7
一定义二构造函数三数据结构四存储实现put五读取实现get一、定义HashMap实现了Map接口,继承AbstractMap。其中Map接口定义了键映射到值的规则,而AbstractMap类提供 Map 接口的骨干实现,以最大限度地减少实现此接口所需的工作,其实AbstractMap类已经实现了Map,这里标注Map LZ觉得应该是更加清晰吧!public clas
2018-01-04 11:28:22
486
原创 Java集合类(六)Map
摘要Map集合简介摘要HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(JavaDevelopmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。本文结合JDK1.7和JDK1.8的区别,深入探讨HashMap的结构实现和功能原理。Map集合简介Java为数据结构中的映射定义了一个接口java
2018-01-04 11:13:39
396
原创 Java集合类(五)list总结
一List接口概述二使用场景三ArrayList与Vector区别一、List接口概述List接口,成为有序的Collection也就是序列。该接口可以对列表中的每一个元素的插入位置进行精确的控制,同时用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。 下图是List接口的框架图: 通过上面的框架图,可以对List的结构了然于心,其各个类、接口如下:Collection
2018-01-03 20:34:45
279
原创 Java集合类(四)LinkedList
一概述二源码分析1定义2属性4增加方法5移除方法5查找方法一、概述LinkedList与ArrayList一样实现List接口,只是ArrayList是List接口的大小可变数组的实现,LinkedList是List接口链表的实现。基于链表实现的方式使得LinkedList在插入和删除时更优于ArrayList,而随机访问则比ArrayList逊色些。Linke
2018-01-03 20:16:51
255
原创 Java集合类(三)ArrayList
一ArrayList概述二ArrayList源码分析1底层使用数组2构造函数3新增4删除5查找6扩容一、ArrayList概述ArrayList是实现List接口的动态数组,所谓动态就是它的大小是可变的。实现了所有可选列表操作,并允许包括 null 在内的所有元素。每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。默认初始容量
2018-01-03 19:59:34
317
原创 Java集合类(二)Vector
一Vector简介类定义主要构造函数二源码addremove一、Vector简介Vector可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。不过,Vector的大小是可以增加或者减小的,以便适应创建Vector后进行添加或者删除操作。 Vector实现List接口,继承AbstractList类,所以我们可以将其看
2018-01-03 19:25:17
252
原创 Java集合类(一)概览
一非线程安全的集合ListSetMap总结二线程安全的集合List和SetMapQueue一、非线程安全的集合java集合的架构。主体内容包括Collection集合和Map类;而Collection集合又可以划分为List(队列)和Set(集合)。上面的图展示了整个集合大家族的成员以及他们之间的关系。下面就上面的各个接口、基类做一些简单的介绍(主要
2018-01-03 17:48:15
1106
原创 Java-JUC包中的锁-Semaphore(六)
一、Semaphore简介Semaphore是一个计数信号量,它的本质是一个”共享锁”。 信号量维护了一个信号量许可集。线程可以通过调用acquire()来获取信号量的许可;当信号量中有可用的许可时,线程能获取该许可;否则线程必须等待,直到有可用的许可为止。 线程可以通过release()来释放它所持有的信号量许可。二、Semaphore的函数列表// 创建具有给定的许可数和非公
2018-01-02 17:54:37
273
原创 Java-JUC包中的锁-CycleBrrier(五)
一、CyclicBarrier简介CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。二、CyclicBarrier函数列表CyclicBarrier(int parties)创建一个新的 CyclicBarrier,它将在给定数
2018-01-01 20:03:25
619
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅