Java
文章平均质量分 66
l491337898
这个作者很懒,什么都没留下…
展开
-
Android|Java 写文件优化(使用缓冲区)
对于不使用缓存读写文件的操作(1M大小): FileOutputStream fos = new FileOutputStream(file);// BufferedOutputStream bos = new BufferedOutputStream(fos); for (int i原创 2017-01-19 00:58:21 · 3393 阅读 · 0 评论 -
关于散列算法的一些学习
参考地址:https://www.zhihu.com/question/20733617原创 2018-09-02 23:43:57 · 257 阅读 · 0 评论 -
Java Thread|线程的状态
以下内容全部为源码学习加上自己的经验所得Java线程分别有一下六种状态:NEW,RUNNABLE,BLOCKED,WAITING,TIME_WAITING,TERMINATED.①NEW状态,通过new Thread() 创建一个线程对象的时候,这是一个线程的初始状态,但是尚未启动!②RUNNABLE状态 在java 虚拟机中的可运行状态,但是可能会等待操作系统中的其他资源,如CP...原创 2018-09-01 17:11:28 · 182 阅读 · 0 评论 -
Java内存模型|并发|多线程
对Java 并发从软件架构到硬件架构的详细解释和描述,包括:线程通信线程同步内存模型内存同步指令重排内存屏障指令共享变量可见性共享变量的竞争Happens-before 特性等https://blog.csdn.net/suifeng3051/article/details/52611310...转载 2018-08-27 11:44:16 · 148 阅读 · 0 评论 -
CountDownLatch|CyclicBarrier
其实很早之前就有过这么个想法:比如有10个任务,其中有个任务A,A任务需要等待其他所有的任务完成后,再开始执行,这里每个任务都是在单独的线程完成,举个栗子:对Launcher类的App,需要对Android设备上的所有应用的入口信息处理,这个过程是相当长的,但是我们可以根据当前设备可用线程数,创建一定数量的线程,将入口处理分成多个任务单独处理,处理完后,一次性写入数据库.而写入出具...原创 2018-07-19 19:58:43 · 159 阅读 · 0 评论 -
算法|堆排序
堆排序与之前提到的希尔排序,归并排序,快速排序是完全不同的排序算法,堆排序是唯一同时在空间和时间两个方面都有较优性能的算法,在空间上,不使用额外的空间,在时间上,又尽可能的快.学习堆排序,需要了解二叉树 的概念.两点:堆结构堆序性首先说堆结构,堆是一个完全二叉树,首先它必须是一颗二叉树,所谓二叉树,就是任意节点的子节点不超过两个,然后完全二叉树是在二叉树的结构上附...原创 2018-04-25 18:09:06 · 479 阅读 · 0 评论 -
算法|快速排序
算法实现请移步这里前面已经陆续有:选择排序 ,冒泡排序,插入排序,希尔排序,归并排序可以看到,是按照排序算法的性能来罗列的.快速排序和归并排序一样,也是"分治思想"的经典应用快速排序能很好的适用于各种各种的随机输入,并且大多数情况下,都要优于以上其他算法,并且只需要有限的辅助数组(归并排序需要额外的等量的内存空间),它的内存换也是相当的简单.上面提到它跟归并排序一样,也是使用"分治思想"来进行算法...原创 2018-04-22 20:39:39 · 182 阅读 · 0 评论 -
算法|希尔排序
理解希尔排序前,请务必先理解 插入排序,这是前提!插入排序的思路就是在未排序的数组中选择第一个元素,在已经排序的数组中找到合适的位置并插入.他相比选择排序的优势在于,如果数组部分有序,或者大多数元素理最终的位置都不太远,就可以大大减少比较和交换次数.但是存在这样情况,比如最小的元素恰好在数组的最末尾,它需要依次和相邻的元素比较和交换,所以我们需要进行需要N-1次比较和N-1次交换位置,才能将最小元...原创 2018-04-12 11:47:06 · 209 阅读 · 0 评论 -
算法|归并排序
前面讲过的几种排序算法,选择排序,冒泡排序,插入排序,希尔排序,这些排序可以归为一类(算法实现请移步这里).因为他们是逐个元素依次比较和交换,其中插入排序对于有序元素有一定的优势,希尔排序是制造比较优势.这些排序算法都是内外循环的方式,一直到数据结束.而归并排序使用递归的方式,将数组分成无数个小的子数组,对子数组进行排序,然后依次将他们归并起来,从而达到对整个数组排序的目的.将两个有序的数组归并起...原创 2018-04-16 13:24:45 · 281 阅读 · 0 评论 -
算法|选择排序与插入排序比较
请先参考:选择排序 插入排序选择排序前面介绍了,对于任何数组而言,他的总的时间复杂度近似为:N2/2, 是随着数组的长度成平方级别的增长的,数组越长,算法的复杂度会成倍的增长.加入数组是完全有序的呢?或者部分有序,那么选择排序依然会对每个元素进行比较,也就是说,选择排序它无法感知到数组的有序特征如果是插入排序,前面也介绍了:第一种:数组已经排好序,则只需要N-1次比较就好了,不需要任何交换第二种:...原创 2018-04-11 14:59:38 · 1330 阅读 · 0 评论 -
算法|插入排序
前面已经讲过 选择排序, 冒泡排序,他们都是基于比较的排序,接下来介绍的插入排序虽然也是基于比较的,但是在某些情况下,他们较少元素之间的比较次数,相较选择和冒泡,排序性能可以降到平方级别以下插入排序的总体思路为:每次插入排序都是将某个未排序的元素插入到已经排好顺序的数组里面。描述:首先我们认为第一个元素已经排好顺序,毫无疑问,第一个元素只有他自己从第N个元素(下文称为:此元素)开始,将此元素与前面...原创 2018-04-09 13:46:56 · 207 阅读 · 0 评论 -
算法|算法性能实测(选择|插入|希尔)
使用100w个随机数,随机数文件地址为: 随机数文件start sort...size 1048576select cost 418258Insert cost 94330 (优化过的插入排序,如果没有优化,可能需要两倍的时间! 插入排序优化)Shell cost 193随机数大小为 1048576 个数选择排序:418s插入排序:94s希尔排序:193ms可以看到希尔排序的巨大优势!将排序速度控...原创 2018-04-15 13:37:47 · 234 阅读 · 0 评论 -
算法|冒泡排序
前面讲过 选择排序 是基于元素比较的,现在这个是基于相邻元素比较的算法算法描述:使用从小到大的排序策略.从最后一个元素开始,按照从后向前的方向,相邻元素之间进行比较,如果发现后一个元素比前一个元素小,则交换,直至数组结束,这样就可以找出最小的元素,放在第一个位置.然后再次重复上面的策略,在剩下的元素中找到最小的元素放在第二个位置.直至整个循环结束算法实现为:public class BubbleS...原创 2018-04-15 13:32:08 · 343 阅读 · 0 评论 -
算法|选择排序
选择排序的算法描述:选定第一个元素,与剩下的元素逐一比较,找到最小的那个元素,直到数组结束,然后与第一个元素交换。选定第二个元素,与剩下的元素逐一比较,找到最小的那个元素,直到数据结束,然后与第二个元素交换。依次类推。。。直到第N个元素算法实现为:public class SelectSort { public static void main(String[] args) { ...原创 2018-04-09 10:56:19 · 319 阅读 · 2 评论 -
Android|Java 开发中的那些坑 ConcurrentModificationException
开发中会遇到很多问题,比如:public static void foreach(List<String> names) { for (String s : names) { names.remove(s); } }会抛出 ConcurrentModificationException异常,这是大家经常会遇到的问题,但是下面这种写法:p原创 2017-01-18 20:20:48 · 393 阅读 · 0 评论 -
Double-check|并发原理
http://gee.cs.oswego.edu/dl/cpj/jmm.htmlhttps://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html先给自己挖个深坑原创 2018-11-14 08:59:30 · 501 阅读 · 0 评论