- 博客(18)
- 资源 (14)
- 收藏
- 关注
原创 Java设计模式之工厂模式
Java设计模式之工厂模式1. 引子在介绍这篇内容之前,先以一个小故事开头。话说有一个暴发户,他家有三辆轿车(奔驰、宝马、奥迪),还雇了司机为他开车。不过,暴发户每次坐车时总是这样:上奔驰车后跟司机说“开奔驰车!”,坐上宝马后他说“开宝马车!”,坐上奥迪后他说“开奥迪车!”。也许你会说:这人有病吧!直接说开车不就行了?!非得多此一举是要表明自己是壕了吗?这是病,得治。其实像这样的行为放到程序中来实现
2015-07-29 00:39:14 676
原创 Java设计模式之单例模式
Java设计模式之单例模式1. 概述单例模式是一种常见的设计模式,在工作生活中也经常遇到这样的实例。比如我们要听歌,使用WindowsMediaPlayer来播放,那这个播放器就是一种单例模式的。当我们双击来播放一首歌曲时,首先打开播放器,然后播放声音,如果这时我们要切换到另外一首歌曲播放,是不会重新再打开一个播放器窗口的,它将直接在已打开的窗口中切换播放后打开的歌曲。显然这样设计是合理的,试想,如
2015-07-24 21:25:26 573
原创 查找算法之二分查找算法
查找算法之二分查找算法1. 概述二分查找算法也称折半查找算法,是在有序数组中用到的较为频繁的一种查找算法。在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,即顺序查找。二分查找较顺序查找更优,因为这种算法每一次比较都使查找范围缩小一半。2. 算法思想二分查找算法是建立在有序数组基础上的。算法思想为:查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则查找过
2015-07-23 08:08:49 9083
原创 排序算法之选择排序
排序算法之选择排序1. 介绍在冒泡排序算法一篇中,介绍了基本的冒泡排序与几种改进方法,但无论那几种方法怎么改进,都还是基于两两交换不断推进的冒泡排序。冒泡排序算法最费时的是什么?一是相邻元素两两比较,二是不满足排序规则的元素两两交换,当然交换要比比较费时多了。两两交换的目的是什么呢?是找出最值(最大值或最小值)。但是冒泡排序算法中找最值的代价是很大的,每次遍历,可能需要很多次交换才能找到最值,而这些
2015-07-22 23:55:27 683
原创 排序算法之插入排序
排序算法之插入排序1. 介绍有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然保持有序,这个时候就要用到一种新的排序方法——插入排序法。插入排序的基本操作就是将一个数据插入到已经排好序的有序数列中,从而得到一个新的、个数加一的有序数列,算法适用于少量数据的排序,时间复杂度为O(n^2),是稳定的排序方法。插入算法把要排序的数组分成两部分:第一部分包含了这个
2015-07-22 21:48:04 1062
原创 排序算法之冒泡排序
冒泡排序1. 介绍冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,每次比较相邻的两个元素,如果他们的顺序不满足排序条件就把他们交换过来。遍历数列的工作是重复地进行直到不再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小(或越大)的元素会经由交换慢慢“浮”到数列的顶端。2. 算法描述先来看一张图:上图就表明了冒泡排序的算法过程,按照从小到大(升序)排
2015-07-22 16:47:57 1144
原创 Java设计模式之装饰者模式
Java设计模式之装饰者模式1. 介绍通常我们有两种方式为一个类或者对象添加行为:一是使用继承。继承是给一个类添加行为的比较有效的途径。通过使用继承,可以使得子类在拥有自身行为的同时,还可以拥有父类的行为。但是使用继承是静态的,在编译的时候就已经决定了子类的行为,我们不便于控制增加行为的方式和时机。二是使用关联,即将一个对象嵌入到另一个对象中,由另一个对象来决定是否引用嵌入对象的行为来扩展自己的行为
2015-07-22 09:27:57 665 1
原创 ThreadLocal用法与实现原理
ThreadLocal用法与实现原理1. 对ThreadLocal的理解Java API中对ThreadLocal的描述是:该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,它们
2015-07-20 17:18:00 3130
原创 Java多线程之生产者消费者模式
Java多线程之生产者/消费者模式1. 描述生产者/消费者问题是研究多线程程序时绕不开的经典问题之一,它主要描述的是用一个缓冲区作为仓库,生产者可以将生产的产品放入仓库,消费者则可以从仓库中取走产品。再详细一点的描述就是:在生产者和消费者之间共用一个容器,生产者生产的商品放到容器中(容器有一定的容量),消费者从容器中消费商品,当容器满了后,生产者等待,当容器为空时,消费者等待。当生产者将商品放入容器
2015-07-20 08:57:31 796
原创 Java的内存分析
Java的内存分析1. 概述垃圾回收(Garbage Collection,简称GC)是Java的一大特征,它可以自动释放不再使用的对象的资源(内存),因为不需要手动释放内存,程序员在编程中也可以减少犯错的机会。比如在C中,就没有垃圾回收的机制,程序员需要手动释放内存,就可能会出现一些指针和内存泄露相关的Bug。对于Java程序员来说,GC是交给虚拟机(JVM)的自动内存管理机制来完成的,不再需要为
2015-07-17 09:04:17 1329 1
原创 Java中HashSet的存储原理
Java中HashSet的存储原理1. 说明HashSet,从字面意思我们大致可以看出它包含了两方面的内容:Hash和Set,即散列与集合。实际确实如此,HashSet实现了Set接口,所以它符合Set集合使用的特征,集合中不允许有重复的元素,同时HashSet底层的实现是通过HashMap来实现元素保存操作的。2. 分析我们来分析一下HashSet的原码,下面这段是HashSet中存储对象的数据结
2015-07-15 23:14:08 5041 1
原创 散列表(哈希表)
散列表闲话散列表一直以来,有用到Java中的HashMap、HashTable,知道它们是以散列表的结构实现数据存放,但到底什么是散列表,存储结构到底是怎么样子的,始终没有弄清楚过。经过多方查询,最终找到一个好的例子来帮我们解释了到底散列表是什么东西,现引用一下。我们以一个小故事来说明散列表的概念。试想有这样的场景,我在学校很想学太极拳,听说学校有个叫张三丰的人打得特别好,于是就到学生处找人。学生处
2015-07-15 00:20:57 1094
原创 Java接口回调
Java接口回调1. 关于回调回调机制是一种常见的设计模型,他把工作流内的某个功能,按照约定的接口暴露给外部使用者,为外部使用者提供数据,或要求外部使用者提供数据。软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用。异步调用:一种类似消息或事件的机制,不过它的调用方向刚好相反,接
2015-07-14 16:42:04 5311
原创 HttpURLConnection与HttpClient浅析
HttpURLConnection与HttpClient浅析1. GET请求与POST请求HTTP协议是现在Internet上使用得最多、最重要的协议了,越来越多的Java应用程序需要直接通过HTTP协议来访问网络资源。在介绍HttpURLConnection前,我们还是再来说一下URL请求最常用的两种方式:GET请求与POST请求。GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中
2015-07-14 14:25:10 11029
原创 浅析HTTP协议之请求与响应
浅析HTTP协议之请求与响应1. 简介HTTP协议是基于请求响应模式的,即客户端发起请求,服务器端响应。如图:也就是说,要获取服务器端的响应,我们必须由客户端发起请求,否则服务器端无法主动将消息推送给客户端。HTTP是无状态协议,同一个端两次发起的请求是没有对应关系的。一般HTTP的工作流程有以下几个步骤:客户机与服务器需要建立连接。如我们单击页面中的一个超链接,HTTP开始工作,建立与服务器间的
2015-07-14 11:20:24 830
原创 XML使用SAX解析与PULL解析的区别
XML使用SAX解析与PULL解析的区别在最近的应用中,经常会用到对XML的解析,但是一直有一个疑问就是SAX解析与PULL解析的区别到底是什么。搜索了相关的问题,整理如下,以便大家查询。我们知道,SAX解析是事件驱动的,它不会将整个文档读入内存再解析,而是在读取文档的过程中就解析它,所以,文档读入的过程也就是SAX解析的过程。虽然,SAX方式解析XML不会将整个文档放入内存,但它还是会遍历完毕文档
2015-07-10 15:18:57 3790 5
原创 浅析PULL解析
浅析PULL解析1. 基本介绍PULL方式解析XML是在Android中极力推荐使用的一种解析XML的方式,但PULL解析除了在Android中可以使用外,在JavaSE中仍然可以使用。在JavaSE中,我们要使用PULL解析XML,首先得获取XmlPull所需要的类库及依赖类库:类库Jar包下载地址:http://www.findjar.com/jar/xmlpull/xmlpull/1.1.3.
2015-07-10 13:54:00 5109
原创 浅析使用SAX解析XML
浅析使用SAX解析XML1. 概述Java解析XML通常有两种方式,DOM和SAX。DOM虽然是W3C的标准,提供了标准的解析方式,但它的解析效率一直不尽如人意,因为使用DOM解析XML时,解析器读入整个文档并构建一个驻留内存的树结构(节点树),然后您的代码才可以使用DOM的标准接口来操作这个树结构。但大部分情况下我们只对文档的部分内容感兴趣,根本就不用先解析整个文档,并且从节点树的根节点来索引一些
2015-07-09 23:44:41 2028
Genymotion连接Eclipse插件库
2015-10-17
Java和C语言实现各种经典算法_含代码图例
2011-11-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人