- 浏览: 35369 次
- 性别:
- 来自: 重庆
最新评论
文章列表
ArrayBlockingQueue是concurrent包提供的一个线程安全的队列,由一个数组来保存队列元素.通过takeIndex和putIndex来分别记录出队列和入队列的下标,以保证在出队列时不进行元素移动.
//在出队列或者入队列的时候对takeIndex或者putIndex进行累加,如果已经到了数组末尾就又从0开始,保证数组的循环使用.
final int inc(int i) {
return (++i == items.length) ? 0 : i;
}
//入队列操作
private void insert(E x) {
...
作为前言,首先是要吐槽一下公司的脑残编译部署方式,web和core分开部署本来没什么问题,但是这丫居然不把json的包作为基础包而作为web的包,导致了core端不能使用,而且我们的core是可以当web来用的(不要在意这些细节),所以在core中处理json串就是个问题.没办法,跟编译那帮人也扯不清楚,只有自己写json的解析了.
思路还是将json的解析拆分为两类,一类为Object,解析为map,一类为Array,解析为list.
先谈Object的,比如是一个这样的串:{aa:bb,cc:{dd:ee,ff:gg}},不管它的层次有多深,先将其拆分为key1:va ...
好久没碰wxPython了,于是就想在自己的centos中装上温习一下,顺便重新熟悉下linux.于是上官网下安装包,结果坑爹的发现linux只提供源码编译安装(或许是因为我英语不好没发现).源码就源码嘛,反正mysql也是源码装的,下好源码开始装...于是发现坑得一手好爹,各种缺包,各种报错.这种情况当然只能问谷歌了,结果是还是装不上.
后来想能不能用yum装呢?再问谷歌,发现悲催的被墙了,这下只能问度娘了,还好度娘给了我个yum源的地址http://springdale.math.ias.edu/data/puias/6/x86_64/os/Addons.欢欢 ...
话说以前的树都用java写的,最近发现python有点生疏了,于是用python写了个B树实现,B树在索引领域用得还是蛮多了,如果没记错mysql的默认索引好像就是B树...
首先是数据实体对象,很简单,只存放key,value
class Entity(object):
'''数据实体'''
def __init__(self,key,value):
self.key = key
self.value = value
然后节点对象
class Node(object):
'''B树的节点'''
...
这里说的堆其实是一个完全二叉树,每个节点都不小于自己的子节点,不要跟jvm的堆搞混了.由于是完全二叉树,可以用数组来构建.用数组构建树的规则很简单:
一个节点的父节点下标为: (当前下标 - 1)/2
一个节点的左节点下标为: 当前下标 * 2 + 1
一个节点的右节点下标为: 当前下标 * 2 + 2
用数组来构建时,可以非常方便的访问最后一个最后一个节点,所以,堆比较适合于优先级队列之类的应用.每次新增节点时,总是先插入到数组最后一个空位,再依次跟父节点比对,如果父节点小就交换;每次删除节点时总是删除并返回根,然后将最后一个节点放到根的位置, ...
多叉树:2-3-4树
- 博客分类:
- Tree
平衡树多叉树,每个节点最多有4个子节点和3个数据项,2,3,4的含义是指一个节点可能含有的子节点的个数,效率比红黑树稍差.一般不允许出现重复关键字值.2-3-4树有以下特征:
1、有一个数据项的节点总是有2个子节点(称为2-节点)
2、有两个数据项的节点总是有3个子节点(称为3-节点)
3、有三个数据项的节点总是有4个子节点(称为4-节点)
简单的说,非叶节点的子节点树总是比它含有的数据项多1,叶节点可能含有一个,两个或三个数据项.空叶节点不存在.2-3-4树的规则如下:
1、第一个子节点的关键字值小于父节点第一个数据项
2、第二个子节点 ...
所谓二叉树,就是一个节点最多只能有两个子节点,而二叉搜索树就是一个经典并简单的二叉树.规则是一个节点的左子节点一定比自己小,右子节点一定大于等于自己(当然也可以反过来).在树基本平衡的时候插入,搜索和删除速度都很快,时间复杂度为O(logN).但是,如果插入的是有序的数据,那效率就会变成O(N),在这个时候,树其实变成了一个链表.
tree代码:
public class Tree {
private Node root;
/**
* 插入节点
* @param data
*/
public void ...
红黑树是一种自平衡的二叉树,它的查找,插入,删除操作时间复杂度皆为O(logN),不会出现普通二叉搜索树在最差情况时时间复杂度会变为O(N)的问题.
红黑树必须遵循红黑规则,规则如下
1、每个节点不是红就是黑。
...
public void quickSort(int[] array){
this.quickSort(array, 0, array.length - 1);
}
public void quickSort(int[] array,int left,int right){
if(right - left <= 0){
return;
}else{
int partition = this.partition(array, left, right ...
public void shellSort(int[] array){
int limit = 1;
int temp;
int index;
while(limit <= array.length/3){
limit = limit * 3 + 1;
}
while(limit != 0){
for(int i=limit;i<array.length;i++){
...
public void mergeSort(int[] array){
int temp = array.length/2;
if(temp == 0){
return;
}
int[] a = new int[temp];
int[] b = new int[array.length - temp];
for(int i=0;i<temp;i++){
a[i] ...
public void insertSort(int[] array){
int temp;
for(int i=1;i<array.length;i++){
temp = array[i];
for(int k=i-1;k>=0;k--){
if(array[k] > temp){
array[k+1] = array[k];
...
public void selectSort(int[] array){
int select;
for(int i=0;i<array.length;i++){
select = i;
for(int k=i+1;k<array.length;k++){
if(array[select] > array[k]){
select = k;
...
public void bubbleSort(int[] array){
for(int i=1;i<array.length;i++){
for(int k=0;k<array.length-i;k++){
if(array[k] > array[k+1]){
int swap = array[k];
array[k] = array[k+1];
array[k+ ...
最近没有什么学习欲望,修改之前的线程池的计划一直搁置,这几天比较闲,还是做了一次重构,由之前的2个类拆分为现在的4个类.
1、首先是工作线程类:TaskThread,此类为一个工作线程,用于完成一个工作任务,提供等待(wait),继续(proceed),绑定任务(bindTask)等方法
#!/usr/bin/env python
# -*- coding:utf8 -*-
import threading
class TaskThread(threading.Thread):
def __init__(self):
super(TaskThrea ...