文件名称:JAVA版msn(最新)
文件大小:653KB
文件格式:RAR
更新时间:2012-03-18 12:41:33
Java msn
package process; import java.io.FileNotFoundException; import java.io.IOException; import objectClass.BTreeNode; public class BTree { private String name = "";//此b树的名字 也是存储数据的根目录 private String node_address = "";//查找时找到键值所在文件的名称 private int node_index = 0;//查找是找到键值所在文件内部的下标索引 private int flag = 0;//节点增减是否需要调整的标志 private int tree_level = 0;//b树的层数 private int tree_count = 0;//b树内元素的总个数 private int node_sun = 0;//b树节点的个数 private int level = 0;//当前访问的节点所在处的高度 private String newNode = "";//在节点分割时指向新建的节点的名字(路径) private int insKey = 0;//需要插入的关键值 private Object insObj = null;//需要插入的对象 private int readCount = 0;//统计一次操作(查找、插入、删除)所要读硬盘的次数 private int writeCount = 0;//统计一次操作(查找、插入、删除)所要写硬盘的次数 private String firstNode = "";//此b树的头节点的名字(路径) //临时节点的地址索引、路径和节点的名字 private BTreeNode tempNode = null; private String tempNodePath = null; private String tempNodeName = null; public BTree(){ } /** * 根据输入的关键值查找相应的数据 * 查找成功返回相应的数据对象 * 查找不成功返回null * @throws ClassNotFoundException * @throws IOException * @throws FileNotFoundException * */ public Object search(int key) throws FileNotFoundException, IOException, ClassNotFoundException{ int i , j , m; clearCount(); level = tree_level - 1; tempNodeName = firstNode; while(level >= 0){ tempNodePath = MyObjectIO.getExactPath(name, tempNodeName , MyObjectIO.INDEX); tempNode = (BTreeNode)MyObjectIO.readObject(tempNodePath); readCount++; for(i = 0 , j = tempNode.count-1; i < j ; m=(i+j)/2 , ((key>tempNode.key[m]) ? (i=m+1) : (j=m)) ); if(key == tempNode.key[m]){//找到读出相应的数据记录返回 } if(key > tempNode.key[i]) i++; tempNodeName = tempNode.child[i]; level--; } return null; } /** * 清除记录读写硬盘的计数器 * */ public void clearCount(){ readCount = 0; writeCount = 0; } /** * 返回记录读硬盘的次数 * */ public int getReadCount(){ return readCount; } /** * 返回记录写硬盘的次数 * */ public int getWriteCount(){ return writeCount; } }