Fork me on GitHub

《Thinking in Java》十七章_容器深入研究_练习12(Page484)

练习12:


    练习使用HashMap / LinkedHashMap / TreeMap


 1 import java.util.HashMap;
 2 import java.util.LinkedHashMap;
 3 import java.util.Map;
 4 import java.util.TreeMap;
 5 
 6 public class Main {
 7 
 8     public static void main(String[] args) {
 9         
10         /*--------------- HashMap -------------------------*/
11         
12         Map<String,String> map1=new HashMap<String,String>();
13         
14         map1.put("sky","blue");
15         map1.put("grass","green");
16         map1.put("ocean","dancing");
17         map1.put("tree","tall");
18         map1.put("earth","brown");
19         map1.put("sun","warm");
20         map1.put("extra","object");
21         
22         log(map1);
23         log(map1.get("ocean"));
24     
25         /*--------------- TreeMap -------------------------*/
26         
27         Map<String,String> map2=new TreeMap<String,String>();
28         
29         map2.put("sky","blue");
30         map2.put("grass","green");
31         map2.put("ocean","dancing");
32         map2.put("tree","tall");
33         map2.put("earth","brown");
34         map2.put("sun","warm");
35         map2.put("extra","object");
36         
37         log(map2);
38         log(map2.get("ocean"));
39         
40         /*--------------- LinkedHashMap -------------------------*/
41         
42         Map<String,String> map3=new LinkedHashMap<String,String>();
43         
44         map3.put("sky","blue");
45         map3.put("grass","green");
46         map3.put("ocean","dancing");
47         map3.put("tree","tall");
48         map3.put("earth","brown");
49         map3.put("sun","warm");
50         map3.put("extra","object");
51         
52         log(map3);
53         log(map3.get("ocean"));
54         
55     }
56     
57     public static void log(Object ...args){
58         for(int i=0;i<args.length;i++){
59             System.out.print(args[i]+" ");
60         }
61         System.out.println();
62     }
63     
64 }

 

单词统计的一般过程:

 

使用HashMap的实现如下:

 

 1 import java.io.BufferedReader;
 2 import java.io.FileInputStream;
 3 import java.io.FileNotFoundException;
 4 import java.io.IOException;
 5 import java.io.InputStreamReader;
 6 import java.io.UnsupportedEncodingException;
 7 import java.util.HashMap;
 8 import java.util.Map;
 9 
10 public class Main {
11 
12     public static void main(String[] args) {
13         
14         String path="E:/英语/阅读训练/哈利波特英文版1-7全集/1.Harry Potter and the Sorcerer's Stone.txt";
15         
16         Map<String,Integer> map=wordCount(path);
17         
18         for(String s:map.keySet()){
19             System.out.printf("%s=%d\n",s,map.get(s));
20         }
21         
22     }
23     
24     public static Map<String,Integer> wordCount(String filePath){
25         
26         BufferedReader reader=null;
27         Map<String,Integer> map=new HashMap<String,Integer>();
28         
29         try {
30             reader=new BufferedReader(new InputStreamReader(new FileInputStream(filePath),"UTF-8"));
31             
32             StringBuilder sb=new StringBuilder();
33             
34             String s=reader.readLine();
35             while(s!=null){
36                 sb.append(s);
37                 s=reader.readLine();
38             }
39             
40             //先进行预处理,然后再分割
41             String words[]=preprocess(sb.toString()).split("\\s{1,}");
42             
43             //统计词频
44             for(String e:words){
45                 if("".equals(s)) continue;
46                 Integer t=map.get(e);
47                 map.put(e,t==null?1:t+1);
48             }
49             
50         } catch (UnsupportedEncodingException e) {
51             e.printStackTrace();
52         } catch (FileNotFoundException e) {
53             e.printStackTrace();
54         } catch (IOException e) {
55             e.printStackTrace();
56         }finally{
57             try {
58                 if(reader!=null) reader.close();
59             } catch (IOException e) {
60                 e.printStackTrace();
61             }
62         }
63         
64         return map;
65     }
66     
67     //对内容进行预处理,去除一些干扰元素之类的
68     public static String preprocess(String s){
69         return s.replaceAll("\\s{1,}"," ").replaceAll("[,.'\"?!-;*]"," ").toLowerCase();
70     }
71     
72 }

 

posted @ 2016-08-19 19:29  CC11001100  阅读(189)  评论(0编辑  收藏  举报