- 博客(28)
- 资源 (3)
- 收藏
- 关注
转载 设计模式的分类与设计原则
一、设计模式的分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。其实还有两类:并发型模式和线程池
2017-03-22 10:34:11
311
原创 Activity的几种LaunchMode及使用场景
standard 模式这是默认模式,每次激活Activity时都会创建Activity实例,并放入任务栈中。使用场景:大多数Activity。singleTop 模式如果在任务的栈顶正好存在该Activity的实例,就重用该实例( 会调用实例的 onNewIntent() ),否则就会创建新的实例并放入栈顶,即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建新的实例。使用场景如新闻类或
2017-03-07 11:16:48
538
原创 如何理解Activity,View,Window三者之间的关系
这个问题真的很不好回答。所以这里先来个算是比较恰当的比喻来形容下它们的关系吧。Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显示视图)LayoutInflater像剪刀,Xml配置像窗花图纸。1:Activity构造的时候会初始化一个Window,准确的说是PhoneWindow。2:这个PhoneWindow有一个“ViewRoot”,这个“ViewRoo
2017-03-07 11:15:54
1921
1
转载 startService与bindService的区别
Android执行Service有两种方法,一种是startService,一种是bindService。下面让我们一起来聊一聊这两种执行Service方法的区别。 1、生命周期上的区别执行startService时,Service会经历onCreate->onStartCommand。当执行stopService时,直接调用onDestroy方法。调用者如果没有stopService,Servi
2017-03-07 10:31:26
347
转载 java中thread的start()和run()的区别
1、start()方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码: 通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就绪状态, 并没有运行。 然后通过此Thread类调用方法run()来完成其运行操作的, 这里方法run()称为线程体, 它包含了要执行的这个线程的内容, Run方法运行结束, 此线程终止, 而CPU再运
2017-03-05 18:42:00
235
转载 Java反射机制详解
Java反射机制详解 - Java初级码农 - 博客园 Java初级码农随笔 - 44, 文章 - 0, 评论 - 5, 引用 - 0 Java反射机制详解 java 反射 定义 功能 示例概要:Java反射机制详解| |目录1反射机制是什么2反射机制能做什么3反射机制的相关A
2017-03-05 10:33:08
453
转载 java中的移位运算符:<<,>>,>>>总结
java中有三种移位运算符1、<< : 左移运算符,num << 1,相当于num乘以2 2、>> : 右移运算符,num >> 1,相当于num除以2 3、>>> : 无符号右移,忽略符号位,空位都以0补齐下面来看看这些移位运算都是怎样使用的/** * @author Jone Hongten * @create date:2013-11-
2017-03-05 09:27:48
347
原创 二叉查找树
二叉排序树(Binary Sort Tree)又称二叉查找树(Binary Search Tree),亦称二叉搜索树。二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值; (3)左、右子树也分别为二叉排序树; 如下图所示: 1、查询二叉查找树
2017-02-26 15:18:41
304
原创 二叉树
二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^{i-1}个结点;深度为k的二叉树至多有2^k-1个结点;对任何一棵二叉树T,如果其终端结点数为n_0,度为2的结点数为n_2,则n_0=n_2+1。一棵深度为k,且有2^k-1个节点称之为满二叉树;深度为k,有n个节点的二叉树,当且仅当其每一个节点都与深度为k的满二叉树中,序号为
2017-02-16 18:27:29
788
原创 散列表
基本概念 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为
2017-02-16 16:04:54
298
原创 链表
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个
2017-02-15 20:35:19
331
原创 栈和队列
栈:又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 栈的基本操作原则是先进后出 队列:队列是一种特殊的线性表,特殊之处在于它只允许在表的
2017-02-15 20:17:11
269
原创 深入理解Android虚拟机三------内存分配策略
Java虚拟机 Java的内存分配管理 1、Java栈 存放的数据: Java栈图 2、Java堆: 堆内存的三个部分 3、常量池: 运行时的数据区域 Java虚拟机运行时的数据区结构 1、程序计数器 2、Java虚拟机栈VM Stack 3、本地方法栈Native Method Stack 4、Java堆 5、方法区 6
2017-02-14 21:29:37
639
原创 深入理解Android虚拟机二------虚拟机概述
Java虚拟机: 1、Java虚拟机的数据类型: 2、Java虚拟机的体系结构: Java虚拟机结构框图 Android虚拟机—Dalvik VMDavlik VM架构 Android应用的编译和运行流程 Android的初始化流程
2017-02-13 10:28:54
556
原创 深入理解Android虚拟机一------Android系统的结构
Java虚拟机和Android虚拟机: 进程生命周期: Android内核和Linux内核的区别:
2017-02-13 10:04:52
373
原创 桶排序
基本思想: 将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是 比较排序,他不受到 O(n log n) 下限的影响。 例如要对大小为[1..1000]范围内的n个整数A[1..n]排序,可以把桶设为大小为10的范围,
2017-01-13 20:06:24
229
原创 基数排序
基本思想: 将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。 然后 从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。演示:Java代码:import java.util.Arrays;public class LinearTimeSorter { /** * 基数排序。将每个int(32位)拆分为8个4位
2017-01-13 19:59:43
248
原创 计数排序
基本思想: 对每一个输入元素x,确定出小于x的元素个数。有了这一信息,就可以把x直接放到它在最终输出数组中的位置上。例如,如果有17个元素小于x,则x就属于第18个输出位置。计数排序是一个非基于比较的排序算法。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。当然这是一种牺牲空间换取时间的做法,而且当O(k)>O*(n*log(n))的时候
2017-01-13 19:51:19
292
原创 快速排序
基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值
2017-01-13 19:37:23
413
原创 堆排序
堆:堆数据结构是一种数组对象,它可以被视为一科完全二叉树结构。它的特点是父节点的值大于(小于)两个子节点的值(分别称为大顶堆和小顶堆)。它常用于管理算法执行过程中的信息,应用场景包括堆排序,优先队列等。堆排序:堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是
2017-01-13 19:26:20
457
原创 冒泡排序
冒泡排序(Bubble Sort)重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。冒泡排序算法的运作如下: 1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 3、 针对所有
2017-01-08 10:49:30
427
原创 分治法
分治法的设计思想是:将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。分治法策略是:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法。分治法所能解决的问题一般具有以下几个特征: 1
2017-01-08 10:38:40
714
原创 插入排序
插入排序应该是最简单的排序,其原理将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2),是稳定的排序方法。 插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已
2017-01-08 10:24:55
461
转载 底部弹出对话框
private void showDialog() {//自定义的xml布局文件View view = getLayoutInflater().inflate(R.layout.photo_choose_dialog, null);//设置Dialog的透明主题Dialog dialog = new Dialog(this, R.style.transparentFrameWind
2016-05-19 21:53:19
345
集合的几个运算
2012-12-29
停车场的问题
2012-12-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人