算法学习-哈希表

定义

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。它通过把关键码映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数(哈希函数),存放记录的数组叫做散列表。

阅读全文 »

算法学习-优先队列

普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (largest-in,first-out)的行为特征。

阅读全文 »

算法学习-堆栈和队列

栈和队列都是动态集合,可以理解为线性表或线性表实现的数据结构。它可以由数组实现,也可以由链表实现。
和数组链表等不一样的是,栈、队列添加、删除数据的位置都是预先设定的。在栈中,被删除的是最近被插入的元素,栈实现的是一种先进后出的策略。而队列中,被删去的总是在集合中存在时间最长的元素,队列实现的是一种先进先出的策略。
栈和队列是非常有用的数据结构,在计算机中很多的地方使用了栈、队列的思想。函数执行的压栈及出栈,消息队列的使用等等。本文最后将介绍栈和队列的常见使用场景,递归转化。

阅读全文 »

CompletionService的使用

接口CompletionService的功能是以异步的方式一边生产新任务,一边处理已完成任务的结果,这样可以将执行任务与处理任务分离开来进行处理。使用submit()执行任务,使用take()取得已完成的任务,并按照完成这些任务的时间顺序处理它们。

阅读全文 »

Executor与ThreadPoolExecutor的使用

在开发服务端软件项目时,经常需要处理时间很短而数目却非常巨大的请求,如果为每一个请求创建一个新的线程,会导致性能上的瓶颈,因为线程对象的创建和销毁需要JVM频繁的处理,如果执行时间很短,可能花在创建和销毁线程对象上的时间将大于真正执行任务的时间,若这样,系统性能将大大降低。
因此JDK5起提供了线程池的支持,主要作用则时支持高并发的访问处理,并且可以将线程对象进行复用。

阅读全文 »

Phaser的使用

Phaser提供动态增减parties(屏障点)计数,这点币CyclicBarrier类操作parties更加方便,通过若干个方法来控制多个线程之间同步运行的效果,还可以实现针对某一个线程取消同步运行的效果,而且支持在指定屏障处等待,在等待时还支持中断或非中断等功能。对线程并发进行分组同步控制时,它比CyclicBarrier类功能更加强大,更建议使用。

阅读全文 »