java 26行较短写法不容易出错,坑点:循环输出的顺序指的是第一次插入的循序而不是最后一次使用,使用linkedhashmap有序插入特征,使用bufferedreader比scanner较快输入
运行时间:16ms
占用内存:9596k
import java.io.*;
import java.util.*;
public class 简单错误记录linked{
public static void main(String[] args) throws IOException{
BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
Map<String,Integer> m=new LinkedHashMap<String,Integer>();
String tstr=null;
while((tstr = cin.readLine()) != null && !tstr.equals("")){ //&& !tstr.equals(""))没有性能影响
String[] str=tstr.split("\\s+");
String fname=str[0].substring(str[0].lastIndexOf("\\")+1);
fname=fname.substring(Math.max(fname.length()-16 ,0))+" "+str[1]; //max 最快推荐 ?:也可以 if太麻烦
Integer tmp=m.get(fname); //get==null较快写法
if(tmp==null)
m.put(fname,1);
else
m.put(fname, tmp+1);
}
int cnt=0;
for(Map.Entry<String,Integer> it:m.entrySet()){
if(m.size()-cnt<=8)
System.out.println(it.getKey()+" "+it.getValue());
cnt++;
}
}
}
/*
运行时间:45ms
占用内存:10772k
v3 改用bufferedReader
运行时间:18ms
占用内存:9600k
v4 split \\ 改为 lastIndexOf("\\")+1
运行时间:16ms
占用内存:9596k
* */


京公网安备 11010502036488号