作者cyberwizard (Gavin)
看板java
标题Re: [问题] hashmap 的效能 (300mb档案)
时间Mon Aug 27 15:13:04 2012
假设有 a.txt 以及 b.txt 两个档案
a.txt b.txt
c1 c2 c3 c1 c2 c3 c4
将a.txt 转成 map
int first;
while((line = br.readLine()) != null) {
first = line.indexOf(" ");
map.put(line.substring(first + 1).hashCode(), // 只存 hashcode
line.substring(0, first));
}
不存 c2, c3 字串,可省下 2/3 记忆体
假设取代 b.txt 中 c4
int last;
while((line = br.readLine()) != null) {
first = line.indexOf(" ");
last = line.lastIndexOf(" ");
bw.write(line.substring(0, last) + " " //c1 c2 c3
+ map.get(line.substring(first + 1, last).hashCode()) //c4
+ "\n");
}
实测约30秒内跑完,看电脑状况
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.123.85.140
1F:→ lovdkkkk:如果不同 string hashCode 一定不同的话可行 08/27 16:10
2F:推 PsMonkey:[乱入] 用 Scanner.hasNext() 会不会更省咧? 08/27 16:57
3F:推 luoqr:基本上面对这样的资料量...选用资料库解法会简单省事很多 XD 08/27 20:06
4F:→ lovdkkkk:少了一千万对 key value, 改用一千万次 db query :x 08/27 20:19
5F:→ luoqr:join column就好了? :$ 08/27 20:23
6F:→ lovdkkkk:5F 突破盲点了! 08/27 20:34
7F:推 love112302:谢谢!!! 从来没有想过要用 hashCode 的方式 QQ 08/30 10:25