摘要:
Android平台的一大特色就是支持桌面插件——AppWidget。且不说,AppWidget是否会影响系统的流畅性,AppWidget确实是满足了用户个性化和快捷操作的需要。常见的AppWidget有四种基本形态:信息型:想当年HTC的翻页时钟就大红大紫过好长一阵子。控制型:集合型:混合型:其实大部分的AppWidget都是属于这个类型的,即能够显示信息,又提供控制功能。总结一下:AppWidget提供了一个快速的途径去获得我们想要的信息提供一个快捷的手段去控制应用一些设计良好的AppWidget确实可以为手机增色不少本人有一定的“应用洁癖”,一般只用那些没有太多乱七八糟功能的应用。一直在找 阅读全文
摘要:
前些日子几大互联网巨头展开了一轮网盘空间大战。一下子从G级别提高到了T级别。以后谁的空间没有1T估计都不好意思开口了~~~试用了一下360云盘的客户端,比较小清新(不是给360打广告~~~)。刚好UI这一块是我最不擅长的,于是萌发了练习模仿它的UI的念头~~~顺便把复习一下自定义控件的使用。以下是完成的效果图,左边是官方的,右边是我模仿的: 还挺像的吧~~~先介绍一个神器:UI Automator Viewer这个SDK的tools文件夹或DDMS中都可以找到。它可以很方便地查看UI的视图层级和UI控件的具体位置与实现。相当好用,有了它我们就不用去猜官方到底是怎么实现的、使用什么布局了。具体实 阅读全文
摘要:
KMP算法应该是每一本《数据结构》书都会讲的,算是知名度最高的算法之一了,但很可惜,我大二那年压根就没看懂过~~~之后也在很多地方也都经常看到讲解KMP算法的文章,看久了好像也知道是怎么一回事,但总感觉有些地方自己还是没有完全懂明白。这两天花了点时间总结一下,有点小体会,我希望可以通过我自己的语言来把这个算法的一些细节梳理清楚,也算是考验一下自己有真正理解这个算法。什么是KMP算法:KMP是三位大牛:D.E.Knuth、J.H.Morris和V.R.Pratt同时发现的。其中第一位就是《计算机程序设计艺术》的作者!!KMP算法要解决的问题就是在字符串(也叫主串)中的模式(pattern)定位问 阅读全文
摘要:
堆排序(Heap):要讲堆排序之前先要来复习一下完全二叉树的知识。定义:对一棵具有n个结点的二叉树按层序编号,如果编号为i(0 = 0; i--) { adjust(array, i, array.length); }} private static void adjust(int[] array, int n, int size) { int temp = array[n]; // 先拿出数据 int child = n * 2 + 1; // 这个是左孩子 while (child array[child]) { child++; ... 阅读全文
摘要:
归并排序(Merge Sort):归并排序是一个相当“稳定”的算法对于其它排序算法,比如希尔排序,快速排序和堆排序而言,这些算法有所谓的最好与最坏情况。而归并排序的时间复杂度是固定的,它是怎么做到的?两个有序数组的合并:首先来看归并排序要解决的第一个问题:两个有序的数组怎样合成一个新的有序数组:比如数组1{ 3,5,7,8 }数组2为{ 1,4,9,10 }:首先那肯定是创建一个长度为8的新数组咯,然后就是分别从左到右比较两个数组中哪一个值比较小,然后复制进新的数组中:比如我们这个例子:{ 3,5,7,8 } { 1,4,9,10 } { }一开始新数组是空的。然后两个指针分别指向第一个元素, 阅读全文
摘要:
今天花了点时间把七个常见的内部排序重新复习了一遍,总结一下,也算是验证一下自己有没有真正理解。冒泡排序(Bubble Sort):很多人听到排序第一个想到的应该就是冒泡排序了。也确实,冒泡排序的想法非常的简单:大的东西沉底,汽泡上升。基于这种思想,我们可以获得第一个版本的冒泡:public static void sort1(int[] array) { for (int i = 0; i array[j]) { // 进行两元素之间的位置交换 int temp = array[j - 1]; array[j... 阅读全文
摘要:
蓝牙应该是现在每一部智能手机的标配了。想当年在山寨机横行的年代里,蓝牙都可以做为一个卖点~~~废话不多说了,进入正题:使用蓝牙功能是需要权限的,关于蓝牙的权限也就两个:第一个是最基本的,打开蓝牙,请求连接,接受连接都需要这个。每二个从字面上看都觉得高级一点,它主要用于像建立搜索、对蓝牙进行设置这些操作。添加好权限之后就可以开始使用了Android系统为我们提供了一个功能极其强大的类用于进行蓝牙操作,这个类就是BluetoothAdapter。通过这个类的方法可以满足我们的大多数操作了。要获得这个类的对象我们可以直接调用它的一个静态方法getDefaultAdapter()。顺便看看它的源码是怎 阅读全文
摘要:
Content Provider是Android系统四大组件之一:官方的定义是:A Content Provider manages access to a central repository of data.那么Android系统为什么要提供这样一个组件呢?个人觉得至少有如下两点:首先,Android是一个很重视安全性的系统(貌似Android系统的漏洞最多~~~),一个应用的数据对于其他应用来说私有的,除非你把数据存储在SD卡上。但很多时候我们需要在程序之间共享数据,比如我们想获取联系人的信息之类的。这时Content Provider就提供了一个很好的解决方案,将数据的存储、读取细节隐 阅读全文
摘要:
线性表(List):零个或多个数据元素的有限序列。关键字有两个: “零个”也就是说线性表是可以为空的; “有限序列”不管多长的线性表,总要有一个最大长度,并且元素与元素之间是一对一的关系,也即有一定的顺序。在Java中有一个很“神奇的”类,就是ArrayList。它神奇的地方在于它使用起来和数组一样简单,但却提供了更多更方便的方法。感觉上ArrayList是可以无限添加元素的!这一点太方便了,它是怎么做到的呢?其实,ArrayList是底层就是用数组来实现的!但是上次不是才说数组的长度是不能变的吗?实际上,它可以实现“无限的”添加元素只是因为它的底层有一个机制,在数组空元素用完的时候会生成.. 阅读全文
摘要:
不知不觉大学过了三年,最遗憾的就是在大二没把《数据结构》和《算法》这两门课程学好~~~现在每天花一点时间把这两个内容回顾一下,算是给自己的一点目标吧!数组(Array):数组算是最简单的也是最基本的结构之一。在Java中,我们声明一个数组有两种形式:int[] array = { 1, 2, 3 };或int array[] = { 1, 2, 3 };这两种形式都是可以的,但推荐第一种,为什么呢?首先,int[]和int是两种完全不同的类型!int是原生数据类型(Primitive Data Type)而int[]是引用数据类型(Reference Type)。比如像上面的array,它是有 阅读全文