数据快速查询的新方法
2006-11-26 16:27
295 查看
/**//*
* Main.java
*
* Created on 2006年11月20日, 下午4:29
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package chartest;
/** *//**
*
* @author longronglin
*/
import java.util.Random;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.BufferedWriter;
import java.util.Arrays;
import java.util.Map;
import java.util.HashMap;
public class Main
...{
private static final int Max = 10019;
private static String[] keyWord = new String[Max];
private static long[] keyNum = new long[Max];
private static String charsetName = "gbk";
/** *//** Creates a new instance of Main */
public Main()
...{
}
/** *//**
* @param args the command line arguments
*/
public static void main(String[] args)
...{
/** *//** 关键词文件 */
String keyWordFile = "d:/keyword.txt";
/** *//** 读取关键词 并存入keyWord数组中 */
readKeyWord(keyWordFile);
/** *//** 关键词文件对应的前8位字节的long型数 */
String keyNumFile = "d:/keywordNum.txt";
/** *//** 读取对应的数 并存入keyNum数组中 */
readKeyNum(keyNumFile);
/** *//** 根据keyWordFile中的关键词算出每个词的前8位字节对应的long数据 并存入keyNumfile文件中 */
//writeNumFile(keyWordFile,keyNumFile);
int i = 0;
/** *//** 对字符串进行顺序查找 */
long startTime = System.currentTimeMillis();
for(i=0;i<keyWord.length-3;i++)
...{
/** *//** 字符串对应的首次出现的序号 */
keyWordSearch(keyWord[i]);
long endTime = System.currentTimeMillis();
System.out.println(endTime-startTime);
}
System.out.println("The first end");
/** *//** 对keyNum数组进行排序从小到大 */
Arrays.sort(keyNum);
startTime = System.currentTimeMillis();
for(i=0;i<keyWord.length-3;i++)
...{
int len = 0;
/** *//** 字符串对应的首次出现的序号 */
try
...{
len = keyWord[i].getBytes(charsetName).length;
}
catch(Exception e)
...{
e.getStackTrace();
}
if(len <= 8)
...{
keyNumSearch(keyWord[i]);
}
else
...{
keyWordSearch(keyWord[i]);
}
long endTime = System.currentTimeMillis();
System.out.println(endTime-startTime);
}
}
public static void readKeyWord(String fileName)
...{
int i = 0;
try
...{
BufferedReader in = new BufferedReader(new FileReader(fileName));
String strTemp = null;
while ((strTemp = in.readLine()) != null)
...{
keyWord[i]=strTemp;
i++;
}
in.close();
}
catch (IOException e)
...{
e.getStackTrace();
}
}
public static void readKeyNum(String fileName)
...{
int i = 0;
try
...{
BufferedReader in = new BufferedReader(new FileReader(fileName));
String strTemp = null;
while ((strTemp = in.readLine()) != null)
...{
keyNum[i]=Long.parseLong(strTemp);
i++;
}
in.close();
}
catch (IOException e)
...{
e.getStackTrace();
}
}
public static final long getLongOfByteArray (byte[] bytes)
...{
long result = 0;
int len =0;
if(bytes.length<8)
...{
len = bytes.length;
}
else
...{
len = 8;
}
for (int i=0; i<len ; i++)
...{
result=result<<8;
result=result+(bytes[i]&0xff);
}
return result;
}
public static long keyWordSearch(String str)
...{
int result=0;
for(int i=0; i<keyWord.length; i++)
...{
if(str.equals(keyWord[i]))
...{
result = i;
//System.out.println(i);
return(i);
}
}
return -(result+1);
}
public static long keyNumSearch(String str)
...{
byte[] strByte = null;
long result = 0;
try
...{
strByte = str.getBytes(charsetName);
}
catch(Exception e)
...{
e.getStackTrace();
}
long keyWordNum = getLongOfByteArray(strByte);
long index = Arrays.binarySearch(keyNum,keyWordNum);
if(index>0)
...{
return index;
}
return -(result+1);
}
public static void writeNumFile(String srcFile,String dstFile)
...{
File SrcFile=new File(srcFile);
if(!SrcFile.exists())
...{
System.err.println("Can't Find " + srcFile);
}
try
...{
BufferedReader in = new BufferedReader(new FileReader(SrcFile));
BufferedWriter out = new BufferedWriter(new FileWriter(dstFile));
String str = null;
while ((str = in.readLine()) != null)
...{
try
...{
out.write(String.valueOf(getLongOfByteArray(str.getBytes(charsetName))));
out.newLine();
}
catch (IOException e)
...{
}
}
in.close();
out.close();
}
catch (IOException e)
...{
e.getStackTrace();
}
}
}
相关文章推荐
- Oracle客户端与plsql查询数据乱码修改成中文的快速解决方法
- Oracle客户端与plsql查询数据乱码修改成中文的快速解决方法
- bos常用数据的查询方法
- php访问查询mysql数据的三种方法
- 关于mysql处理百万级以上的数据时如何提高其查询速度的方法
- 寻求快速的数据库数据插入方法
- php使用glob函数快速查询指定目录文件的方法
- jQuery 数据列表快速查询
- VB6数据导出到Excel文件,一种设计界面查询条件的方法,一种简单加密方法(改写)
- SQL Server 百万级数据提高查询速度的方法
- php+mysqli批量查询多张表数据的方法
- 处理千万级以上的数据提高查询速度的方法....
- 一种快速查询多点DS18B20温度的方法
- 如何优化Mysql千万级快速分页,limit优化快速分页,MySQL处理千万级数据查询的优化方案!(zz)
- php+mysqli批量查询多张表数据的方法
- php标签云制作——数据表的结构和查询方法
- PL/SQL Developer 使用中文条件查询时无数据的解决方法(转)
- 处理百万级以上的数据提高查询速度的方法
- ASP.NET MVC3 快速入门-第六节 增加一个追加数据的方法和一个追加数据的视图
- SQL Server 百万级数据提高查询速度的方法