第三周作业之效能分析

git地址:https://git.coding.net/wangwd/SecondAssignment.git

要求0

  测试一

  消耗时间:2.978 S

  CPU参数:占用小于10%

 

  测试二

  消耗时间:5.273 S

  CPU参数:占用小于10% 

 

测试三

消耗时间:2.378 S

CPU参数:占用小于10%

 

要求1

猜测代码瓶颈

1 String line = " ";

String不能动态分配内存,可能会使程序内存占用过多,以致拖慢整个程序的运行速度。

要求2

profile未优化的程序

最花费时间的三个代码片段

代码片段一(控制台读入)

1 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
2         //bw = new BufferedWriter(new FileWriter("test.txt",true));   //true表示是否追加
3         String str = br.readLine();    //接收用户输入
4         while(!str.equals("exit")){//如果用户输入exit则退出循环
5             line = line + " "+str;
6             //继续接收输入    
7             str = br.readLine();
8             
9         }

代码片段二(存词)

 1 for(String s: str1){
 2         //判断s是否是字母开头
 3             if(s.matches(mt)){
 4                 if(!map.containsKey(s)){
 5                     //如果集合中不存在该单词,则将该单词加入该集合中并且计数设为1。
 6                     map.put(s,1);
 7                     //每当有新单词加入,计数加1。
 8                     count++;
 9                 }else{
10                     //如果集合中存在该单词,则将该单词加入该集合中并且计数加1。
11                     map.put(s,map.get(s)+1);
12                     }
13             }
14         }

代码片段三(排序)

1 List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());  
2         Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {  
3             //降序排序  
4             @Override  
5             public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {  
6                 //return o1.getValue().compareTo(o2.getValue());  
7                 return o2.getValue().compareTo(o1.getValue());  
8             }  
9         });  

要求3

 改进代码瓶颈

改进一

改进前

1 String line = " ";

改进后

1 StringBuilder line = new StringBuilder(" ");

改进二

改进前

1 //将大写字符转换成小写字符(方便统计)
2 line.toLowerCase();

改进后

1 //将大写字符转换成小写字符(方便统计)
2 //字符串拼接
3 String line1 = line.toString();
4 line1 = line1.toLowerCase();

要求4

profile优化的程序

 虽然对程序改进了,但是好使的代码片段并没有改变。

最花费时间的三个代码片段

代码片段一(控制台读入)

1 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
2         //bw = new BufferedWriter(new FileWriter("test.txt",true));   //true表示是否追加
3         String str = br.readLine();    //接收用户输入
4         while(!str.equals("exit")){//如果用户输入exit则退出循环
5             line = line + " "+str;
6             //继续接收输入    
7             str = br.readLine();
8             
9         }

代码片段二(存词)

 1 for(String s: str1){
 2         //判断s是否是字母开头
 3             if(s.matches(mt)){
 4                 if(!map.containsKey(s)){
 5                     //如果集合中不存在该单词,则将该单词加入该集合中并且计数设为1。
 6                     map.put(s,1);
 7                     //每当有新单词加入,计数加1。
 8                     count++;
 9                 }else{
10                     //如果集合中存在该单词,则将该单词加入该集合中并且计数加1。
11                     map.put(s,map.get(s)+1);
12                     }
13             }
14         }

代码片段三(排序)

1 List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());  
2         Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {  
3             //降序排序  
4             @Override  
5             public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {  
6                 //return o1.getValue().compareTo(o2.getValue());  
7                 return o2.getValue().compareTo(o1.getValue());  
8             }  
9         });  
原文地址:https://www.cnblogs.com/wwd1993/p/7597396.html