自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 最小生成树

最小生成树是怎么用最短的路径把图所有的结点给连起来。这里有两种方式,一种是Kruskal方法,简称K方法,另一种是Prim方法,简称P方法。K方法:是根据最小权重的边来算的,通过一个优先级队列来存放所有的边,权值最小的在队尾。优先级队列其实就是最大堆和最小堆,看你传进去的比较器是按什么方式排列的。通过一个并查集来存放所有的结点,并查集是看两个元素是否是一个集合和把两个集合合并成一个集合的功...

2018-11-20 21:08:11 143

原创 拓扑排序

拓扑排序是对有向无环图进行操作。简单来说一个结点可能由其他的结点指向他,要想生成这个结点必须先生成指向他的结点。也就是说一个图的入度为0的结点先输出,之后他们指向的结点的入度减一,再从剩下的入度为0的输出,直到全部输出。代码如下所示:public class TopologySort { public static List<Node> sortedTpology(Graph ...

2018-11-20 20:43:19 144

原创 生成图和图的宽度优先遍历和深度优先遍历

一个图有边和结点,边包含权重、入结点和出结点,结点包含值、入度、出度、next结点集、和边的集合。可以用以下代码表示:public class Edge { public int weight; public Node from; public Node to; public Edge(int weight, Node from, Node to) { this.weight...

2018-11-20 20:05:35 1517 1

原创 并查集

什么是并查集:1、非常快的检查两个元素是否是一个集合。2、两个元素所在各自的集合,请把他们合并在一起。先说第一个功能:一个集合中的每个元素都会指向他的父元素,最后根元素指向他自己。判断两个元素是否是一个集合内就看他们的根元素是否是一个元素就可以了。这里有一个优化,就是一个元素可能指向他的父元素,他的父元素又指向另一个元素,另一个元素才指向根元素,在查找根元素的时候,分别把这链上的元素都...

2018-11-20 19:38:11 194

原创 二叉树的序列化和反序列化

树在连接过程中是在内存当中的,机器要关闭时内存东西会销毁,指针的信息怎么去保存成文件的形式,以便下次可以重建这颗树来。以文件形式记录下来,记录的过程就是序列化。把文件中内容还原成内存中树结构的过程就是反序列化。这里讲两种序列化方式,一种是以先序排列方式进行序列化和反序列化,另一种是以水平方式进行序列化和反序列化。这里每个元素以"!"来隔开。先序排列方式:每个叶子结点的左右孩子以"#"的...

2018-11-08 00:51:40 577

原创 队列结构实现栈结构,栈结构实现队列结构

用队列实现栈结构,可以用两个队列来实现。一个用来插入数据,一个用来辅助实现pop和push。push时直接把数放在第一个队列中,pop时,先把队列1里除了最后一个push进去的数全部push进队列2中,最后的元素就是我们要pop出的元素,pop出后再把队列2中的数再放进队列1中。获取栈顶元素和方法和pop的方法相同。用栈实现队列结构,同样要用两个栈来实现。一个栈用来poll数据,一个用来pus...

2018-11-02 17:59:28 257

原创 返回栈中最小元素问题

问题是这样的:实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。要求:1.pop、push、getMin操作的时间复杂度都是O(1)。2.设计的栈类型可以使用现成的栈结构。这个问题可以用两个栈来实现。一个栈用来存放要push和pop的元素,另一个栈用来返回最小值。具体操作是当push一个数时,先放到栈1中,栈2中如果没有元素就直接放入,有元素就和栈顶元素比较,小于...

2018-11-02 17:31:16 572

原创 数组实现固定大小队列和栈

栈的数据结构是先进后出,队列的数据结构是先进先出。数组实现固定大小栈的思想是:先创建一个固定大小的数组和一个size为0的常数,这个常数用来判断栈是否满或者空。当push时,查看size的大小是否为大于数组的长度,大于就给用户抛异常,否则就插入数组的size位置,size++。而pop的时候相反,查看size的大小是否为小于数组的长度,小于就给用户抛异常,否则就把size-1的位置给弹出,si...

2018-11-02 17:14:14 519

原创 桶排序

桶排序是非基于比较的排序,它是一个非常大的概念。他的思想是准备一些有序的桶,把数据放在桶里面。例如输入n个0-1000大小的数,那就准备1001个桶,每个桶放的是每个数出现的次数,这样就可以不用比较就能排好序了。下面介绍一个关于桶的经典的算法。时间复杂度O(N),额外空间复杂度O(N)。给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度O(N),且要求用非基于比较的排序。解题...

2018-11-02 11:37:47 151 1

原创 堆排序

关于堆排序首先要知道什么是完全二叉树,堆排序是基于完全二叉树的。完全二叉树是除了最后一层外,其他层节点个数为最大个数,最后一层节点都是从左到右依次排序的。用数组来模拟二叉树,根节点在数组的下标为index,他的左右节点的小标为2*index+1和2*index + 2。首先,要知道什么是最大堆。最大堆是所有的根节点都比他的左右节点大的堆。创建最大堆的算法思路是一个一个数放进数组里形成最大堆。首...

2018-11-01 15:16:03 157

原创 随机快速排序

经典快排的核心思想是取数组中的一个数,把比这个数小的放在左边,比这个数大的放在右边,在分别对数组的左边和右边进行递归。每次只排好一个数。优化后的快速排序是把比这个数小的放在左边,大的放在右边,相等的放在中间。比较的数每次都是随机从数组中取,这样时间复杂度会很接近O(N*logN),快排的空间复杂度是O(logN)。代码如下:public class QuickSort { publi...

2018-11-01 13:41:59 381

原创 对数器

对数器是验证算法是否正确的一种方式,是通过大量数据来验证是否正确。设计对数器的方法:1、有一个你想测试的算法a2、实现一个绝对正确但复杂度高的算法b3、实现一个随机样本产生器4、实现比对算法a和b的方法5、多次(100000+)比对a和b来验证a是否正确6、如果有样本出错,则打印出来分析7、当对此对比测试都正确时,可以基本判断算法a正确其中要注意的几点:1、...

2018-10-31 13:43:08 151

原创 BlockingQueue阻塞队列的简单使用

BlockingQueue是队列的基础上加上阻塞操作。队列中没有数据时从队头取数据会被阻塞,队列中有数据了就会被被阻塞的线程取出数据,数据会被释放。若队列有容量限制,容量满的话插入数据会被阻塞,有空闲位置才能插入数据。示例代码如下:public class BlockingQueueTest { public static void main(String[] args) { fi...

2018-10-30 19:28:29 250

原创 CountdownLatch同步工具类

CountdownLatch是一个同步工具类,用来线程间通信。它可以使一个线程在其他多个线程完成各自的工作之后再运行。原理是使用一个计数器来实现,计数器的值为线程的数量,每当一个线程完成任务后计数器值减1,值为0时等待的线程就会被唤醒。使用await()方法线程等待,使用countDown()方法线程完成任务减1。下面是示例代码:public class CountdownLatchTe...

2018-10-30 17:13:17 167

原创 Semaphore的使用

Semaphore是信号量也被称为信号灯,主要作用是同种资源可供多个线程并发访问,通过acquire()方法获取共享资源,通过release()方法释放共享资源。其原理是内部维护了一个计数器,他的值是可共享资源的个数。一个线程想获取共享资源,先获取信号量,若信号量的计数器值大于0,则可以获取资源同时计数器-1。计数器值为0时,线程休眠,某个线程使用完共享资源后,则释放信号量,内部计数器加1。之前睡...

2018-10-30 16:57:45 165

原创 面试题:用读写锁写一个缓存

private Map<String,Object> cache = new HashMap<String,Object>();private ReadWriteLock rwl = new ReentrantReadWriteLock();public Object getData(String key) { rwl.readLock().lock(); Obj...

2018-10-29 19:24:18 439

原创 Java的互斥技术和同步通信

在Java的多线程中,很容易出现在一个线程执行一半的时候,另一个线程获取到cpu来执行,比如银行存取款,你的银行账户有1000元,要给别人打200元,在一个线程中你获取到1000元去给别人打钱,在你还没打的时候,突然有人给你打300元钱,这时另一个线程获取到cpu给你打钱,执行完,再执行第一个线程,但此时已经获取到1000元,不是别人给你打完钱的1300元,执行完账户里有800元钱,出现混乱的情况...

2018-10-29 14:34:12 469

原创 Timer定时器

定时器的功能是定时做任务或者按一定事件间隔做任务。1、schedule(TimerTask task, Date executeTime) executeTime时间之后做任务,代码如下:new Timer().schedule(new TimerTask() { @Override public void run() { System.out.println("bombin...

2018-10-29 11:19:12 153

原创 传统的线程创建方式

创建线程有两种方式,一种是通过继承Thread类,另一种是通过Runnable来实现,都需要实现run方法。Thread中的run方法如下:public void run() { if (target != null) { target.run(); }}一、通过继承Thread类,本质是重写Thread类的run方法,代码如下:Thread th...

2018-10-27 15:49:06 88

转载 android随时随地退出程序和知晓当前是在哪一个活动

本文参考郭霖大神的第二行代码,传送门:http://blog.csdn.net/guolin_blog/一、知晓当前属于哪个activity1、新建一个BaseActivity类,继承自AppCompatActivity,并重写onCreate()方法public class BaseActivity extends AppCompatActivity{ @Over

2017-08-07 14:43:40 271

转载 正则表达式二

1匹配验证-验证Email是否正确public static void main(String[] args) {// 要验证的字符串String str = "[email protected]";// 邮箱验证规则String regEx = "[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-

2017-08-02 22:13:11 182

原创 Android用LitePal操作数据库存取图片

Android数据库中存取图片通常使用两种方式,一种是保存图片所在路径,二是将图片以二进制的形式存储(sqlite3支持BLOB数据类型)。对于两种方法的使用,好像第二种方法不如第一种方法更受程序员欢迎,他们认为,在很多数据库语言里,处理大字段都是不容易的,像图片这样的文件放在数据库里会有问题:对数据库的读写速度永远赶不上文件系统的处理速度,使数据库变得巨大;但也有很多人认为像图片这样的数据存放在

2017-08-02 19:09:08 4677 2

原创 Android调用系统图库和相机获取图片并裁剪

1、获取权限 2、点击按钮来提示选择图库还是相机private String[]mCustomItems=new String[]{"本地相册","相机拍照"};//显示选择相机,图库对话框 private void showDialogCustom(){ //创建对话框 AlertDialog.Builder builde

2017-08-02 15:20:41 12792 8

原创 Android的控件ImageView几种在代码中设置图片方法

ImageView imageView=(ImageView)findViewById(R.id.imageview);1、传入参数为 BitmapDrawabledrawable中有一张图片dog.pngimageView.setImageDrawable(ContextCompat.getDrawable(getApplicationContext(),R.drawable

2017-08-02 11:13:45 47250

原创 Handler机制更新UI线程控件

public class HandlerTestActivity extends Activity { private TextView tv; private static final int UPDATE = 0; private Handler handler = new Handler() { @Override public vo

2017-08-01 20:45:42 251

原创 getSystemService();

传入的Name返回的对象说明WINDOW_SERVICE WindowManager管理打开的窗口程序LAYOUT_INFLATER_SERVICELayoutInflater 取得xml里定义的viewACTIVITY_SERVICEActivityManager 管理应用程序的系统状态POWER_SERVI

2017-07-17 13:43:28 218

转载 日期显示格式

For the month of September:M -> 9MM -> 09MMM -> SepMMMM -> SeptemberFor 7 minutes past the hour:m -> 7mm -> 07mmm -> 007mmmm -> 0007Examples for April 6, 1970 at 3:23am:"MM/dd/yy h:mmaa" -> "0

2017-07-16 17:44:59 792

转载 正则表达式

1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,}$ 4 m-n位的数字:^\d{m,n}$ 5 零和非零开头的数字:^(0|[1-9][0-9]*)$ 6 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$ 7 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$ 8 正数、负数、和小数:^

2017-07-16 16:38:50 131

Android Training官方课程的demo源代码

Android Training官方课程的demo源代码。

2018-12-02

Android群英传源码

Android群英传源码,第一版。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

2018-07-26

使用AndroidStudio导入源码时需要的idegen.jar文件

在使用AndroidStudio导入Android系统源码时,需要的idegen.jar文件。放在out/host/linux-x86/framework/目录下即可。

2018-07-26

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

TA关注的人

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