资源简介

使用antlr规则引擎解析sql成对象.里面只有查询语句,但是也预留了update,delete,insert等语句的接口.可以非常方便的扩展

资源截图

代码片段和文件信息

/**
 * 
 */
package com.hiyouyu.core.struct;

import java.io.Serializable;
import java.util.Arrays;
import com.hiyouyu.core.struct.BinaryHeap.Heap;

/**
 * 二叉堆

 * 堆的性质: 在起始索引为 0 的“堆”中: 

 * 1) 堆的根节点将存放在位置 0 

 * 2) 节点 i 的左子节点在位置 2 * i + 1 

 * 3) 节点 i的右子节点在位置 2 * i + 2 

 * 4) 节点 i 的父节点在位置 floor( (i - 1) / 2 ) : 注 floor 表示“取整”操纵
 * 
 * 在起始索引为 1 的“堆”中: 

 * 1) 堆的根节点将存放在位置 1 

 * 2) 节点 i 的左子节点在位置 2 * i 

 * 3) 节点 i 的右子节点在位置 2 *i + 1 

 * 4) 节点 i 的父节点在位置 floor( i / 2 ) : 注 floor 表示“取整”操纵

 * 
 * 以起始索引为1的堆比较好算

 * 
 * 可以参考:http://wxg6203.iteye.com/blog/668968
 * 
 * @author rain
 */
public class BinaryHeap  implements Serializable {
private static final long serialVersionUID = 9073021753354720234L;

private T[] heaps = null;
private int size = 0;
private int DEFAULT_SIZE = 10;

@SuppressWarnings(“unchecked“)
public BinaryHeap(int n) {
if (++n > DEFAULT_SIZE) {
DEFAULT_SIZE = n;
}
heaps = (T[]) new Heap[DEFAULT_SIZE];
}

@SuppressWarnings(“unchecked“)
public BinaryHeap() {
heaps = (T[]) new Heap[DEFAULT_SIZE];
}

/** 对整个堆进行堆化*/
public void heapify() {
for (int i = size / 2; i >= 1; i--) {
fixDown(i);
}
}

/**
 * 是否包含{@link T}

 * 
 * @param value
 * @return 返回传入value所在位置如果没有找到则返回-1
 */
public int contain(T heap) {
if(heap == null){
return -1;
}

for(int i = 1;i < heaps.length;i++){
if (heap.equals(heaps[i])) {
return i;
}
}
return -1;
}

/** 返回所有数据*/
public T[] toArray() {
return (T[]) heaps;
}

/** 获取根节点 */
public T first() {
return heaps[1];
}

/** 获取最后一个节点 不保证最后一个节点是最大的只能保证根节点是最大或最小的 */
public T last() {
return heaps[size];
}

/** 弹出第一个节点 */
public T removeFirst() {
T f = heaps[1];
heaps[1] = heaps[size];
heaps[size--] = null;
fixDown(1);
return f;
}

/** 返回堆中的个数*/
public int size() {
return size;
}

/**
 * 下移
 * 
 * @param k
 *            目标节点的索引
 */
private void fixDown(int k) {
int j;// 目标节点的(左/右)子节点索引
while ((j = k << 1) <= size && j > 0) {
// 假如目标节点k的左子节点大于目标节点k的右子节点,那么重置子节点索引为较小的那个
if (j < size && heaps[j].getValue() > heaps[j + 1].getValue())
j++;
if (heaps[k].getValue() <= heaps[j].getValue())
break;
swap(heaps k j);
k = j;// 非递回式下移搜索
}
}

/**
 * 交换数据中的位置
 * 
 * @param a
 *            数组
 * @param i
 *            位置I
 * @param j
 *            位置J
 */
private void swap(T[] a int i int j) {
T tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}

/** 向堆中添加元素堆的根节点的索引是从1开始的 */
public void add(T o) {
if (size + 1 == heaps.length)
heaps = Arrays.copyOf(heaps heaps.length << 1);
heaps[++size] = o;// 堆根节点的索引从1开始保存数组的第一个值为NULL
// 每次新增元素后可能会破坏堆的性质,所以要进行上移操纵。
// 假如当前新增的元素比它的父节点要大,那么就要把当前元素和它的父节点进行交换,这么反复的直到根节点位置。这就是上移。
fixUp(size);
}

/**
 * 上移:即我们把该节点移动到它的父节点的位置,而让它的父节点到它的位置上,然后我们继续判定该节

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-05-29 09:26  .settings\
     文件         522  2012-04-17 10:30  .settings\org.deved.antlride.core.prefs
     文件          88  2012-04-17 10:30  .settings\org.eclipse.core.resources.prefs
     文件          83  2012-04-17 10:30  .settings\org.eclipse.core.runtime.prefs
     目录           0  2012-05-29 09:26  src\
     目录           0  2012-05-29 09:26  src\lib\
     文件     2388361  2012-04-17 10:35  src\lib\antlr-3.4-complete.jar
     目录           0  2012-05-29 09:26  src\main\
     目录           0  2012-05-29 09:26  src\main\java\
     目录           0  2012-05-29 09:26  src\main\java\com\
     目录           0  2012-05-29 09:26  src\main\java\com\hiyouyu\
     目录           0  2012-05-29 09:26  src\main\java\com\hiyouyu\core\
     目录           0  2012-05-29 09:26  src\main\java\com\hiyouyu\core\struct\
     文件        4570  2012-05-24 23:58  src\main\java\com\hiyouyu\core\struct\BinaryHeap.java
     目录           0  2012-05-29 09:26  src\main\java\com\hiyouyu\core\util\
     目录           0  2012-05-29 09:26  src\main\java\com\hiyouyu\core\util\antlr\
     目录           0  2012-05-29 09:26  src\main\java\com\hiyouyu\core\util\antlr\sql\
     目录           0  2012-05-29 09:26  src\main\java\com\hiyouyu\core\util\antlr\sql\bean\
     文件        1173  2012-04-17 10:30  src\main\java\com\hiyouyu\core\util\antlr\sql\bean\ColumnName.java
     文件        4114  2012-04-17 10:30  src\main\java\com\hiyouyu\core\util\antlr\sql\bean\Condition.java
     文件        1753  2012-04-17 10:30  src\main\java\com\hiyouyu\core\util\antlr\sql\bean\ConditionItem.java
     文件         759  2012-04-17 10:30  src\main\java\com\hiyouyu\core\util\antlr\sql\bean\From.java
     文件        1403  2012-04-17 10:30  src\main\java\com\hiyouyu\core\util\antlr\sql\bean\Join.java
     文件        2653  2012-04-17 10:30  src\main\java\com\hiyouyu\core\util\antlr\sql\bean\MySql.java
     文件        1112  2012-04-17 10:30  src\main\java\com\hiyouyu\core\util\antlr\sql\bean\Order.java
     文件        1464  2012-04-17 10:30  src\main\java\com\hiyouyu\core\util\antlr\sql\bean\OrderItem.java
     文件        2367  2012-04-17 10:30  src\main\java\com\hiyouyu\core\util\antlr\sql\bean\Search.java
     文件        1553  2012-04-17 10:30  src\main\java\com\hiyouyu\core\util\antlr\sql\bean\SearchItem.java
     文件        1455  2012-04-17 10:30  src\main\java\com\hiyouyu\core\util\antlr\sql\bean\Select.java
     文件        1812  2012-04-17 10:30  src\main\java\com\hiyouyu\core\util\antlr\sql\bean\SelectItem.java
     文件        1565  2012-04-17 10:30  src\main\java\com\hiyouyu\core\util\antlr\sql\bean\Table.java
............此处省略37个文件信息

评论

共有 条评论