我有一个格式很大的文件:
x a
y c
x d
z a
z s
y k
我希望输出将按照形式进行排序
x a,d
y c,k
z a,s,k
对于此类任务,散列是最好的:
直接的TreeMap解决方案是这样的:
Map agg = Maps.newTreeMap();
while ((line = r.readLine()) != null) {
String[] arr = line.split("");
String key = arr[0];
String value = arr[1];
if(agg.containsKey(key)) {
agg.get(key).append(",").append(value);
}
else {
agg.put(key, new StringBuilder(value));
}
}
}
r.close();
System.out.println("Printing results");
FileWriter f = new FileWriter("out.txt");
for (String key : agg.keySet()) {
f.write(key+""+agg.get(key)+"
");
}
另一种选择是使用哈希图,获取键集,对其进行排序并对其进行迭代.
不同的部分是
System.out.println("Sorting array");
List keys = Lists.newArrayList(agg.keySet());
Collections.sort(keys);
System.out.println("Printing results");
FileWriter f = new FileWriter("out.txt");
for (String key : keys) {
f.write(key+""+agg.get(key)+"
");
}
对我来说,大O不太重要,因为它是批处理工作.
对我来说,内存使用情况更为重要.
哪种策略在内存方面更有效?
HashMap和排序阶段的窥视或TreeMap方法