gpt4 book ai didi

java - 优化匹配2个巨大文本文件的java代码

转载 作者:行者123 更新时间:2023-11-30 07:06:39 26 4
gpt4 key购买 nike

我有一个包含文档索引和发布日期的文件:

0, 2012-05-26T00:00:00Z

1, 2012-05-26T00:00:00Z

5、2010-06-26T00:00:00Z

10, 2014-05-26T00:00:00Z

第二个文本文件包含术语频率和属于他的文档索引:

是, 15, 1

杀死,10,1

突尼斯, 5, 5

和平, 1, 0

我有这个方法可以匹配这两个文件,这样我就可以获得具有这种形式的第三个文件:

是,2012-05-26T00:00:00Z 15

杀死,10,2012-05-26T00:00:00Z

突尼斯, 5, 2010-06-26T00:00:00Z

和平, 1, 2012-05-26T00:00:00Z

我测试了测试文件的方法,它工作正常,但是我的文件大小是1T,所以我的程序已经执行了4天并且仍然可以工作。你能帮我优化它或者给我另一种方法吗?

 public void matchingDateTerme (String pathToDateFich, String pathTotermeFich)  {

try {

BufferedReader inTerme = new BufferedReader(new FileReader(pathTotermeFich));
BufferedReader inDate = new BufferedReader(new FileReader(pathToDateFich));
String lineTerme,lineDate;
String idFich, idFichDate,dateterm,key;
Hashtable<String, String> table = new Hashtable<String, String>();
String[] tokens,dates;
Enumeration ID=null;
File tempFile = new File(pathTotermeFich.replace("fichierTermes", "fichierTermes_final"));
FileWriter fileWriter =new FileWriter(tempFile);
BufferedWriter writer = new BufferedWriter(fileWriter);

//read file date
while ((lineDate = inDate.readLine()) != null) {
dates = lineDate.split(", ");
idFichDate = dates[0].toLowerCase();
dateterm=dates[1];
table.put(idFichDate, dateterm);
}

while ((lineTerme = inTerme.readLine()) != null) {
tokens = lineTerme.split(", ");
idFich = tokens[2].toLowerCase();
String terme=tokens[0];
String freq=tokens[1];
//lire hachtable
ID = table.keys();
while(ID.hasMoreElements()) {
key = (String) ID.nextElement();
if(key.equalsIgnoreCase(idFich)){
String line=terme+", "+freq+", "+table.get(key);
System.out.println("Line: "+line);
writer.write(line);
writer.newLine();
}
}
}


writer.close();
inTerme.close();
inDate.close();

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}



}

最佳答案

您没有使用哈希表的本质:将键映射到值的对象

迭代键是无用且昂贵的,只需使用 get 方法:

if (table.get(idFich) != null) {
String line = terme + ", " + freq + ", " + table.get(key);
System.out.println("Line: " + line);
writer.write(line);
writer.newLine();
}

正如VGR在评论中所说,使用不同步的HashMap会更快。更多信息here

关于java - 优化匹配2个巨大文本文件的java代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40000898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com