java如何按特定的顺序列出字符串项?
我希望我的程序一次读取一行输入,如果不是以前某个输入行的副本,则将每一行写入输出。而且,具有大量重复行的文件所使用的内存不会超过唯一行数所需的内存
重复行的打印次数应与输入中重复行的打印次数相同我已经完成了一半的问题,但仍然无法正常工作
public class Part1 {
public static void doIt(BufferedReader r, PrintWriter w) throws IOException {
Set<String> s = new HashSet<String>();
String inpt;
int n = 0;
while ((inpt = r.readLine()) != null) {
s.add(inpt);
n++;
}
Iterator<String> i = s.iterator();
while (i.hasNext()) {
w.println(i.next());
}
}
public static void main(String[] args) {
try {
BufferedReader r;
PrintWriter w;
if (args.length == 0) {
r = new BufferedReader(new InputStreamReader(System.in));
w = new PrintWriter(System.out);
} else if (args.length == 1) {
r = new BufferedReader(new FileReader(args[0]));
w = new PrintWriter(System.out);
} else {
r = new BufferedReader(new FileReader(args[0]));
w = new PrintWriter(new FileWriter(args[1]));
}
long start = System.nanoTime();
doIt(r, w);
w.flush();
long stop = System.nanoTime();
System.out.println("Execution time: " + 10e-9 * (stop-start));
} catch (IOException e) {
System.err.println(e);
System.exit(-1);
}
}
}
}
# 1 楼答案
您使用集合的设计决策是好的,但它不能帮助您统计出现次数。你需要的是地图。幸运的是,地图的键是一组
如果不用勺子喂你答案:
Map<String, Integer>
存储单词及其出现总数LinkedHashMap
作为映射实现以保持顺序Map.contains()
确定是否需要创建新条目Map.Entry<String, Integer>
对象的foreach循环在Map.entrySet()
上迭代您应该能够在短短几行代码中完成整个任务