自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 Android的消息机制

Android的消息机制一、Android的消息机制概述二、Android的消息机制分析本篇是个人在阅读安卓开发艺术探索一书后的知识归纳以及分享自己的一些理解所写的博客,在于以后可以方便的进行复习相关知识,毕竟这些基础知识是多多去理解的。一、Android的消息机制概述Android的消息机制主要是指Handler的运行机制以及Handler所附带的MessageQue和Looper的工作过...

2019-09-09 22:11:28 141

原创 理解Window和WindowManager

理解Window和WindowManager一、Window和WindowManager二、Window的内部机制三、Window的创建过程本篇是个人在阅读安卓开发艺术探索一书后的知识归纳以及分享自己的一些理解所写的博客,在于以后可以方便的进行复习相关知识,毕竟这些基础知识是多多去理解的。Window简述:Window一个是窗口的概念,一般用来实现悬浮窗的东西。Window是一个抽象类,具体实...

2019-09-06 20:31:56 145

原创 Android动画深入分析

Android动画深入分析一、View动画本篇是个人在阅读安卓开发艺术探索一书后的知识归纳以及分享自己的一些理解所写的博客,在于以后可以方便的进行复习相关知识,毕竟这些基础知识是多多去理解的。一、View动画View动画通过对场景里的对象不断做图像变换(平移、缩放、旋转、透明度)从而产生动画效果,是一种渐进式动画,支持自定义动画。支持四种动画效果,分别时平移动画、缩放动画、旋转动画和透明度动...

2019-09-02 20:11:48 214

原创 View的工作原理

View的工作原理一、初始ViewRoot和DectorView二、理解MeasureSpec本篇是个人在阅读安卓开发艺术探索一书后的知识归纳以及分享自己的一些理解所写的博客,在于以后可以方便的进行复习相关知识,毕竟这些基础知识是多多去理解的。一、初始ViewRoot和DectorViewViewRoot对应于ViewRootImpl类对象,它是连接WindowManager和DectorV...

2019-08-28 16:20:06 164

原创 View的事件体系相关

View的事件体系三、弹性滑动四、View的事件分发机制五、View的滑动冲突本篇是个人在阅读安卓开发艺术探索一书后的知识归纳以及分享自己的一些理解所写的博客,在于以后可以方便的进行复习相关知识,毕竟这些基础知识是多多去理解的。(本来这一章已经写完了大部分了,由于自己的疏忽没保存导致将近6k字的文章就这么没了,唉,所以我是打算从后续弹性滑动开始补吧,至于之前的知识后续考虑补吧。。。)同样我也看...

2019-08-25 18:11:33 100

原创 Activity的深入学习

Activity的知识进阶(安卓开发艺术探索)一、Activity生命周期Activity的生命周期分析二、Activity的启动模式三、IntentFilter的匹配规则(额外知识)Fragment本篇是个人在阅读安卓开发艺术探索一书后的知识归纳以及分享自己的一些理解所写的博客,在于以后可以方便的进行复习相关知识,毕竟这些基础知识是多多去理解的。一、Activity生命周期Activity...

2019-08-07 00:35:14 338

原创 数组中出现次数超过一半的数字(剑指offer)

数组中出现次数超过一半的数字(剑指offer)数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。解法1:遍历加入到HashMap中,再遍历一遍进行判断即可解法2:一个数超过一半则他比其他所有数个数的和都大,那么我们就可以标记第一个值,...

2019-04-03 18:35:24 73

原创 二叉搜索树与双向链表(剑指offer)

二叉搜索树与双向链表(剑指offer)输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解法:二叉搜索树就是左子树都小于根节点,右子树大于根节点,所以思路就是中序遍历(左中右)就是已经是从小到大的顺序的,可以设置一个前驱节点prenode,初始为null,通过中序遍历,每遍历一个节点,该节点left为prenode,prenode...

2019-04-03 18:23:51 102

原创 复杂链表的复制(剑指offer)

复杂链表的复制(剑指offer)输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)解法1:通过HashMap,分成两个阶段,第一各阶段就是通过next复制一条普通的链表,每次插入一个节点时,HashMap通过put原链表节点和该节点...

2019-04-03 18:17:24 95

原创 二叉树中和为某一值的路径(剑指offer)

二叉树中和为某一值的路径(剑指offer)输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)解...

2019-04-03 15:53:13 778

原创 二叉搜索树的后序遍历序列

二叉搜索树的后序遍历序列(剑指offer)输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解法:二叉搜索树就是左子树所有节点小于根节点,所有右子树大于根节点,而后续遍历则又是左右中(故数组一段全小于最后一个,后一段全大于),故数组最后一个数字是根节点。所以进行循环,找到第一个大于该根节点的节点,再在该节点...

2019-04-03 15:10:58 106

原创 从上往下打印二叉树(剑指offer)

从上往下打印二叉树(剑指offer)从上往下打印出二叉树的每个节点,同层节点从左至右打印。解法:一般二叉树遍历(前序,中序,后序)都是用递归来完成的,但从上到下每层打印就要换种思路了。可以使用队列来实现,首先offer()入头节点,之后循环每次poll()出一个节点时,把该节点的左右子节点加入到队列中,因为队列先进先出,所以就是从上到下,同层左至右依次输入输出队列,直到队列为空结束。impo...

2019-04-03 14:09:46 73

原创 栈的压入、弹出序列(剑指offer)

栈的压入、弹出序列(剑指offer)输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解法:思考一下,如果直接去判断很麻烦。那就可以模拟这个过程...

2019-04-01 21:49:30 96

原创 包含min函数的栈(剑指offer)

包含min函数的栈(剑指offer)定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。解法:通过两个栈来实现这个栈,一个是正常的数据栈data,另一个是存储最小数据的栈min,当push()的时候,如果min为空,min也直接push();接着每有一个数据入栈data,判断该数与min的栈顶,如果小于等于min.peek(),min也push...

2019-03-31 19:03:23 111

原创 二叉树的镜像(剑指offer)

二叉树的镜像(剑指offer)操作给定的二叉树,将其变换为源二叉树的镜像。解法:函数输入一个根节点,交换左右子树,以左右子节点递归该函数进而是所有子树交换。递归结束条件左右子树都为空,每次递归记得判断该节点是否为空。一般二叉树的问题基本上都是递归。。。public class Solution {public void Mirror(TreeNode root) { if(roo...

2019-03-31 18:38:42 76

原创 树的子结构(剑指offer)

树的子结构(剑指offer)输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解法:通过两个函数实现,一个函数1进行判断A、B根节点是否相同,另一个函数2则判断A、B子节点是否仍然相同。具体做法:函数1先判断头节点是否相同,相同执行函数2来判断子节点。若根节点不同或子节点不同,则将B根节点与A的左右子节点判断来继续寻找。 函数2中的具体操作就是,若A为...

2019-03-31 18:16:05 102

原创 合并两个排序的链表(剑指offer)

合并两个排序的链表(剑指offer)输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解法:如果直接在一个链表的基础上判断插入就太麻烦了,所以考虑换一种思路,从头开始建一个链表,每次取两个链表中的较小的进行插入到该新链表尾部,插入一个则那个链表next一次进行下次判断,直到某一条链表为空。具体做法:首先比较两个链表头节点,小的作为新链表头,被取出节点...

2019-03-31 17:42:31 169

原创 反转链表(剑指offer)

反转链表(剑指offer)输入一个链表,反转链表后,输出新链表的表头。解法:很明显,每次都要将当前结点和后续结点断开,与当前结点的next指向前驱结点,故每次先保存后续结点,当前结点next指向前驱,完成一个结点反转;然后前驱结点变更为当前结点,当前结点变为后续结点以便下一次反转public class Solution {public ListNode ReverseList(ListN...

2019-03-31 16:47:19 191

原创 链表中倒数第k个结点(剑指offer)

链表中倒数第k个结点(剑指offer)输入一个链表,输出该链表中倒数第k个结点。解法:倒数第k个节点与最后一个节点相距k-1个节点。所以先定两个节点(first,second)都为头节点,让first节点先走k-1步,然后两个节点同时向后走,当first为尾节点时,second就是倒数第k个节点。同样这道题要注意一些特殊情况,这些特殊情况可能会导致程序出错,如1:链表为空;2:k=0;3:k&...

2019-03-30 19:32:21 115

原创 调整数组顺序使奇数位于偶数前面(剑指offer)

调整数组顺序使奇数位于偶数前面(剑指offer)输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解法:插入排序的思想,先假设第一个已经排好序了,每次外循环是使一个数进行排序;内循环排序具体,这里就是如果前一个数为奇数则不用排;如果前一个数为偶数该数也为偶数不用排,如果前一个数...

2019-03-30 19:08:58 139

原创 数组的整数次方(剑指offer)

数组的整数次方(剑指offer)给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。解法:只需要注意一下exponent的正负值即可public class Solution {public double Power(double base, int exponent) { double result = 1.0; ...

2019-03-30 18:43:35 160

原创 二进制中的1的个数(剑指offer)

二进制中的1的个数(剑指offer)输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解法1:将该数与temp(temp起始为1)进行与运算(就是最低位与1与)结果不为0,则该位为1;结果为0,则该位为0;temp进行左移一位,进而判断该数的下一位;直到判断完该数的所有位即temp左移至结果为0的时候结束。public class Solution {public int N...

2019-03-30 18:24:57 103

原创 矩形覆盖(剑指offer)

矩形覆盖(剑指offer)我们可以用2×1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2×1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?解法:类似于青蛙跳,要使得长2被覆盖,第一次只能是横着放一个或竖着放两个所以:f(n) = f(n-1) + f(n-2).public class Solution {public int RectCover(int target) {...

2019-03-30 17:58:53 54

原创 变态跳台阶(剑指offer

变态跳台阶(剑指offer)一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解法:思路和前一题一样,把跳n级的问题转换为第一次跳多少级得出的跳法相加;就是跳n级台阶,第一次可以是1,2…n,所以跳法:f(n) = f(n-1) + f(n-2) + f(n-3) + … + f(1) +1;f(n-1) = f(n-2) + f...

2019-03-30 17:42:34 62

原创 跳台阶(剑指offer)

跳台阶(剑指offer)一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。解法:跳n级为f(n),从跳上n级台阶的第一次跳来思考,第一次可以是跳了1级,如果跳了1级则后面的跳法就是f(n-1);第一次也可以跳了两级,则后面的跳法就是f(n-2);很明显结论就是f(n) = f(n-1) + f(n-2).public cla...

2019-03-30 17:23:21 90

原创 斐波那契数列(剑指offer)

斐波那契数列(剑指offer)大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39 ,f(n) = f(n-2) + f(n-1).解法1:递归就行public class Solution {public int Fibonacci(int n) { 递归 if(n==0){ retur...

2019-03-30 17:05:23 72

原创 初识广播(第一行代码)

初识广播(第一行代码)接收广播发送广播本地广播广播机制简介Android中每个应用程序都可以自由的发送接收广播。自己可以注册感兴趣的广播来注册。Android的广播有两种类型:1.标准广播。是一种完全异步的广播,广播发出后,所有的广播接收器都能几乎同时接收到,并且没有先后顺序可言。这种广播效率高,但不能被截断。2.有序广播。是一种同步执行的广播,广播发出后同一时间只有一个广播接收器可以...

2019-03-09 21:44:31 171

原创 旋转数组的最小数字(剑指offer)

旋转数组的最小数字(剑指offer)把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解法一:直接对数组排序就行。。。但这样时间复杂度最小也是O(nlogn),不讨论了。...

2019-03-08 18:43:46 73

原创 用两个栈实现队列(剑指offer)

用两个栈实现队列(剑指offer)用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解法:栈先进后出,队列先进先出。stack1用于入,stack2用于出。所以每次push操作时,stack1入栈;pop操作时,先判断stack2是否为空,为空stack1全部出栈stack2来入,再stack2出栈,如果stack2不为空,则直接stack2出栈;这样就完美实...

2019-03-08 18:22:51 83

原创 重建二叉树(剑指offer)

重建二叉树(剑指offer)输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解法:根据前序遍历和中序遍历找到根节点,从而获取左、右子树的前序遍历和中序遍历,递归进而获取左右子树的根节点,一直递归直到没有子树不...

2019-03-08 18:09:45 57

原创 从尾到头打印链表(剑指offer)

从尾到头打印链表(剑指offer)输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。解法:直接创一个栈,遍历链表。。。import java.util.ArrayList;import java.util.Stack;public class Solution {public ArrayList&lt;Integer&gt; printListFromTailToHead...

2019-03-08 17:54:31 206

原创 替换空格(剑指offer)

替换空格(剑指offer)请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解法:首先计算出有多少个空格从而得出新字符串的长度,设定两个标志分别指向原字符串结尾和新字符串结尾,老标志从后往前移动,依次从老字符串结尾一个一个把字符复制给新字符串,复制一次两个标志都向前移动一个;当碰到空格时...

2019-03-08 17:46:22 101

原创 二维数组查找(剑指offer)

二维数组中的查找(剑指offer):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解法一:因为每一行都是递增的,直接对每一行进行二分查找即可。public class Solution {public boolean Find(int targe...

2019-03-08 17:29:21 77

原创 服务的学习(通过第一行代码)

探究服务Android多线程编程服务基本用法首先要知道什么是服务,服务就是Android中用来实现后台运行的,一般要长期运行且不与用户交互的任务通过服务来执行。服务不依赖界面,当程序切换到后台或打开另一个程序都不影响服务运行。但服务不会开启子线程,所有代码都是在主线程运行的,我们要自己在服务中开启子线程。Android多线程编程首先,Android中不允许在子线程中进行UI操作,所以我们可...

2019-01-02 16:58:35 180

原创 网络技术的每日学习(第一行代码)

使用网络技术使用HTTP协议访问网络首先要知道的是在Android P中要求默认使用加密连接,否则会报错,通过http协议访问网络也是这样,在以前的版本中不受限。所以要怎么做呢:现在res文件夹中创建一个xml文件夹,在里面然后创建一个network_security_config.xml文件&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;&

2018-12-19 21:52:15 528

原创 多媒体技术每日学习

运用手机多媒体使用通知使用通知什么是通知,通知就是下拉手机看到的那些提示信息。通知的简单用法在Android 8.0(API26) 后对通知更改了一些内容,以前是通过Notification.Builder(Context context).set…来设置通知的震动、灯光、音效的设置,新内容加了NotificationChannel(通知渠道),通过NotificationChannel来...

2018-12-10 21:52:00 407

原创 Git操作自我复习

Git操作创建代码仓库创建代码仓库使用时先配置你的身份,这样就可以知道谁提交的。git config --global user.name &amp;quot;名字&amp;quot;git config --global user.email &amp;quot;邮箱&amp;quot;通过cd命令进入项目目录下如:cd AndroidProject/ProviderTest创建仓库:git init //会在目录下创建一个隐藏的.g

2018-12-09 18:45:27 149

原创 内容提供器学习心得

AndroidStudio探究内容提供其什么是内容提供器运行时权限访问其他程序中数据什么是内容提供器通过内容提供器,可以实现在不同程序中数据共享,同时保证数据安全性。运行时权限先了解一下运行时权限,是6.0引入的新特性。Android现在把权限分为两种,一种是普通权限,另一种是危险权限。普通权限系统会自动授权,而危险权限则需要运行时由用户授权。危险权限如上图所示,有9组24项,其他则都...

2018-12-05 20:33:56 305

原创 AndroidStudio学习持久化技术的每日知识

AndroidStudio持久化技术我的理解持久化技术文件存储SharedPreferences数据库最近正在学习androidstudio,看的第一行代码,每天学了什么还是记下来好,以后忘了也可以看看。我的理解持久化技术把数据保存到存储设备中。有三种方式分别是文件存储、SharedPreferences、数据库。文件存储对存储的内容不进行任何处理,适合存储一些简单的文本数据或二进制数...

2018-11-26 16:48:17 305

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除