您的位置:首页 > 其它

第三周作业之效能分析

2017-09-26 20:22 295 查看
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         });
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: