- 浏览: 153232 次
- 性别:
- 来自: 武汉
最新评论
-
hardPass:
貌似二分法,没有一个合并的过程
简单_分治算法 -
zhufeng1981:
讲解的不错,支持一下。
简单_分治算法 -
a346063587:
嗯。。的确,基础很重要!
关于递归和尾递归的原理 -
zhufeng1981:
huoyj 写道基础很重要,这是永远不变的真理。 很赞同这句话 ...
关于递归和尾递归的原理 -
huoyj:
基础很重要,这是永远不变的真理。 很赞同这句话
关于递归和尾递归的原理
文章列表
堆是一种比较有用的数据结构,是二叉树的一种数组的表示形式。
最大堆和最小堆是二叉堆的两种形式。
最大堆:根结点的键值是所有堆结点键值中最大者。
最小堆:根结点的键值是所有堆结点键值中最小者。
而最大-最小堆集结了最大堆和最小堆的优点,这也是其名字的由来。
最大-最小堆是最大层和最小层交替出现的二叉树,即最大层结点的儿子属于最小层,最小层结点的儿子属于最大层。
以最大(小)层结点为根结点的子树保有最大(小)堆性质:根结点的键值为该子树结点键值中最大(小)项。
堆的实现代码如下:
package sunfa;
import java.util.Arrays;
im ...
一道腾讯面试题:从大量数字中取出top100
http://www.iteye.com/topic/628707
虽然题目并不难,但看到许多的人回复了,当然有回复的水平高的也有低的反正各种回复千奇百怪。
能想到用二叉树或堆来做的算想对思路了,用多线程部分排序的感觉至少思路上就差得远了。
有个兄弟第一时间用TreeSet给出了代码,当然代码很简单,如下:
package sunfa;
import java.util.Random;
import java.util.TreeSet;
/**
* tx的面试题:1亿个数中取前100个最大的数
*
* 利用TreeSe ...
package sunfa;
import java.util.BitSet;
import java.util.Random;
/**
* BloomFilter(布隆过滤器)
* http://www.cnblogs.com/allensun/archive/2011/02/16/1956532.html
*
*/
public class BloomFilter {
private int DEFAULT_SIZE = 1 << 6;
private BitSet bitSet = null;// java.util.BitSet的 ...
Timer里面的任务如果执行时间太长,会独占Timer对象,使得后面的任务无法几时的执行
ScheduledExecutorService不会出现Timer的问题(除非你只搞一个单线程池的任务区)
Timer搞了一个最小堆,每次取距离当前时间最近的那个任务来执行,
创建Timer的时间会创建TimerThread做为执行线程,所以一个Timer对应一个线程
,一个线程当然不能同时执行多个任务啦(当某个任务执行时间很长就看的出来)。
public Timer(String name, boolean isDaemon) {
thread.setName(name);
...
java io流之 装饰模式
- 博客分类:
- java
初学java.io的时候容易被众多的IO类搞晕头,其实java.io还是很容易理解的,主要就是通过装饰模式来进行功能的扩充。
扩充基类的功能,一般我们都是通过继承来解决的,但是继承会造成类的膨胀,而使用装饰模式就不会。其实装饰模式就是在扩展类里面搞了个被扩展类的引用而已。
package design.decorator;
/**
* “装饰模式(Decorator)”又名“包装模式(Wrapper)”,通常用来灵活地扩充对象的功能。
* 在此之前我们可以通过类的继承来扩充父类的功能,但这种继承方式缺乏灵活性
* ,并且会导到子类数量的快速膨胀。恰当地使用装饰模式我们会轻松 ...
package nio;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.FileChannel;
import java.nio.charset ...
java.util.concurrent.atomic.*包的体会
package thread.concurrent.atomic;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.AtomicReference;
import sun.misc.Unsafe;
public class AtomicTe ...
原帖地址:
http://www.iteye.com/topic/711162
package thread;
import java.util.Iterator;
import java.util.Random;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.CyclicBarrier;
public class SegmentCount {
publ ...
CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待
CyclicBarrier 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。
这是JAVA1.5中的2个帮助类,他们2都是直接继承java.lang.Object的,目的是为了让线程之间的相互等待变得简单。
CountDownLatch的用法如下(CyclicBarrier要更加简单一些而且更加强大一些,用法参看http://www.iteye.com/topic/1116068之前写的一个测试)
pa ...
官方的java.util.concurrent.ArrayBlockingQueue的性能是很BT的,我下午无聊然后就想去测试下到底有多BT就写了如下测试代码,也不知道是我的代码写的有问题还是怎么的啦,测试结果和我想的完全不一样。
条件:20个线程,存取线程各半,队列大小是30W,其他电脑配置啥的啊很大众化就不描述了。
耗时:
山寨版的:2400左右
官方版的:3400左右
--------------------------------------------------------------------------------------------
官方的java.util.con ...
以java.util.LinkedList源码结合本人用XP自带的简陋的画图程序分析链表成链的过程如下:
1、一个空的双链表其实是个环形的链,如下图:
public LinkedList() {
header.next = header.previous = header;
}
2、添加第一个元素的过程如下:
public boolean add(E o) {
addBefore(o, header);
return true;
}
private Entry<E> addBefore(E o, E ...
今天因为一个问题上网搜索却牵扯出了另一个问题。。。纠结。、、还是纠结
纠结之余发现自己的java基础很是薄弱!于是写下了一个纠结的牵扯出的另一个纠结的问题,旨在提醒自己基础很重要!
1、类的私有构造函数虽然不能在外部进行实例化,但是通过反射可以实例化。
PersonDemo p = PersonDemo.class.getDeclaredConstructor(String.class,int.class).newInstance("张三",20);
2、都知道System.gc();是进行垃圾回收(实际会不会还是由JVM决定),它其实会调用Runtime.getRunt ...
java有2个非常重要的排序接口:java.lang.Comparable和java.util.Comparator,
前者是基础包下的,主要通过继承该接口实现类的排序功能,工具包下的主要通过非继承的方式实现排序。
package sunfa;
import java.util.Arrays;
import java.util.Comparator;
public class ComparableDemo1 {
public static void main(String[] args) {
/**
* 一个类实现了java.lang.Comparable接 ...
/** 快速排序方法 */
public static void quickSort(int[] a, int lo0, int hi0) {
int lo = lo0;
int hi = hi0;
if (lo >= hi)
return;
// 确定指针方向的逻辑变量
boolean transfer = true;
while (lo != hi) {
if (a[lo] > a[hi]) {
// 交换数字
int temp = a[lo];
a[lo] = a[hi];
...
package com.lucene;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import ...