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 * */