自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

永无止境,上下求索

先行其言,而后从之

  • 博客(12)
  • 收藏
  • 关注

原创 生产者消费者Java多线程实现

生产者和消费者问题是最经典的模拟多线程合作的问题之一,本文将提供一个具有多个生产者和多个消费者的Java实现。主要涉及到资源的锁定,多线程的合作,以及任务的抽象。产品的抽象每个产品都有一个唯一编号no,在构造函数里面初始化。static class Product { private static int index = 0; private int no; public

2013-12-31 17:41:12 2726

原创 Java多线程总结

Java多线程是什么Java提供的并发(同时、独立)处理多个任务的机制。多个线程共存于同一JVM进程里面,所以共用相同的内存空间,较之多进程,多线程之间的通信更轻量级。依我的理解,Java多线程完全就是为了提高CPU的利用率。Java的线程有4种状态,新建(New)、运行(Runnable)、阻塞(Blocked)、结束(Dead),关键就在于阻塞(Blocked),阻塞意味着等待,阻塞的的线

2013-12-31 15:47:55 8704 1

原创 JAR规格和使用清单

得益于Ant、Maven等构建工具的强大功能,日常软件的打包部署通常都交给它们了。不过最近遇到点构建的问题,查了JAR相关的一些文章。在此做一个总结,对JAR有兴趣的朋友可以一看。什么是JARJAR全称为Java Archive,zip格式的Java打包文件。目的是用来把class文件,资源文件打包成一个文件,利于部署,发布,以及传输。除了打包功能,它被用来构建应用组件(Applicati

2013-12-23 10:51:22 3582

原创 Java启动命令大观

Java启动命令是所有java应用程序的入口,通过它来启动Java运行时环境,并加载相关的class。不过由于IDE的盛行,我们Java程序员中的大多数的并不是非常的了解Java启动命令。本文希望做一个Java启动命令的汇总,和各位同道分享,也便于日后作为自己的参考。Java启动命令语法Java启动命令有两个,java以及javaw,它们的唯一区别是javaw不会启动一个控制台窗口(启动失

2013-12-15 22:03:02 18026

原创 拓扑排序(Topologicalsort)之Java实现

拓扑排序算法介绍拓扑排序解决的是一系列相互依赖的事件的排序问题,比如Ant中有很多的Task,而某些Task依赖于另外的Task,编译之前需要清理空间,打包之前要先编译,但其它一些Task处理顺序可以调换(是无所谓前后,不是并行), 如何安排Task的执行顺序就可以用拓扑排序解决。熟悉Java的朋友应该都知道Spring,一个非常优秀的解决组件(Bean)依赖的框架,组件之间可能有依赖关系,也

2013-12-09 11:45:17 19836 1

原创 计数排序(Countsort)之Java实现

计数排序算法介绍比较排序算法可以通过决策树模型证明,其下线是O(nlgn)。而本文介绍的是时间效率为O(n)的计数排序。所谓排序算法,无非就是把正确的元素放到正确的位置,计数排序就是计算相同key的元素各有多少个,然后根据出现的次数累加而获得最终的位置信息。但是计数排序有两个限制条件,那就是存在一个正整数K,使得数组里面的所有元素的key值都不大于N,且key值都是非负整数。计数排序算法J

2013-12-06 21:39:09 9780 1

原创 堆排序(Heapsort)之Java实现

堆排序算法介绍堆是一种重要的数据结构,为一棵完全二叉树, 底层如果用数组存储数据的话,假设某个元素为序号为i(Java数组从0开始,i为0到n-1), 如果它有左子树,那么左子树的位置是2i+1,如果有右子树,右子树的位置是2i+2,如果有父节点,父节点的位置是(n-1)/2取整。分为最大堆和最小堆,最大堆的任意子树根节点不小于任意子结点,最小堆的根节点不大于任意子结点。所谓堆排序就是利用堆这

2013-12-05 22:25:31 64532 26

原创 快速排序(Quicktsort)之Java实现

快速排序算法介绍快速排序和归并排序都使用分治法来设计算法,区别在于归并排序把数组分为两个基本等长的子数组,分别排好序之后还要进行归并(Merge)操作,而快速排序拆分子数组的时候显得更有艺术,取一个基准元素,拆分之后基准元素左边的元素都比基准元素小,右边的元素都不小于基准元素,这样只需要分别对两个子数组排序即可,不再像归并排序一样需要归并操作。基准元素的选取对算法的效率影响很大,最好的情况是两

2013-12-05 13:14:31 45980 3

原创 归并排序(Mergesort)之Java实现

归并排序算法介绍归并排序是一个分治算法(Divide and Conquer)的一个典型实例,把一个数组分为两个大小相近(最多差一个)的子数组,分别把子数组都排好序之后通过归并(Merge)手法合成一个大的排好序的数组,归并的过程依然用扑克来解释,想象一下桌子上有两堆排好序(从小到大)的牌,每一次从两堆里面各抽取一张,比较一下两张的大小,如果两张一样大,都取出放到目标数组,否则取出较小的放到目

2013-12-04 22:19:34 17014 2

原创 选择排序(Selectsort)之Java实现

选择排序算法介绍选择排序与冒泡排序非常的相似,都是一层层筑顶的过程,不同点在于冒泡排序会频繁的互换位置,而选择排序只是记录最大元素的位置,并与顶互换,只需交换一次。所以选择排序与冒泡排序相比时间常数会更小,更有效率,尽管他们的最坏运行时间都是O(n2)。选择排序算法Java实现如《插入排序(Insertsort)之Java实现》一样,先实现一个数组工具类。代码如下:public c

2013-12-04 21:18:37 5767

原创 冒泡排序(Bubblesort)之Java实现

冒泡排序算法介绍冒泡排序比插入排序更简单,把最大的元素逐步推到最高位(当前须处理子数组的最高位)。依我的理解,冒泡排序是一个一层层筑顶的过程。顶筑好了,排序也就好了。冒泡排序的最坏运行时间是O(n2),效率和插入排序一样。冒泡排序算法Java实现如《插入排序(Insertsort)之Java实现》一样,先实现一个数组工具类。代码如下:public class ArrayUtils

2013-12-04 17:54:37 8078

原创 插入排序(Insertsort)之Java实现

插入排序算法介绍排序算法是最简单的算法,也是最基本的算法。顾名思义,插入排序就是把当前待排序的元素插入到一个已经排好序的列表里面。 一个非常形象的例子就是右手抓取一张扑克牌,并把它插入左手拿着的排好序的扑克里面。插入排序的最坏运行时间是O(n2), 所以并不是最优的排序算法。特点是简单,不需要额外的存储空间,在元素少的时候工作得好。插入排序算法Java实现Java里面有很多数据类型,我

2013-12-04 17:07:17 31802 4

空空如也

空空如也

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

TA关注的人

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