分拣存储01——高淇JAVA300讲笔记之分拣存储

      利用HashMap实现分拣存储,可以简单理解成往特定的袋子里装东西。举个例子,装苹果的袋子里只能往里丢苹果,装橘子的袋子里只能往里丢橘子。

      以下代码的作用是统计一段英文句子里每个单词出现的次数。

   

      解决思路:

      1.把句子分割成单词存进数组里;

      2.遍历这个数组,把单词存进HashMap里。HashMap里的key就是每个单词,value就是单词出现的次数。value的值也可以是一个对象,对象里有关于次数的属性。

      3.最后就是通过迭代器查看每个单词出现的次数。

 

第1种解决办法:HashMap的value直接存单词出现次数

 1 package com.bjsxt.map;
 2 
 3 import java.util.HashMap;
 4 import java.util.Iterator;
 5 import java.util.Map;
 6 import java.util.Set;
 7 
 8 /**
 9  * 分拣存储:1:N
10  * 统计单词出现的次数
11  * this is a cat and that is a mice and where is the food ?
12  * 思路
13  * 1.分割字符串
14  * 2.分拣存储
15  * 3.按要求查看单词出现的次数
16  * 
17  *
18  */
19 public class MapDemo01 {
20     public static void main(String[] args) {
21         //1.分割字符串
22         String[] arr = "this is a cat and that is a mice and where is the food ?".split(" ");
23         //2.分拣存储
24         Map<String,Integer> map = new HashMap<String,Integer>();
25         for(String key:arr) {
26 //            System.out.println(key );  //打印每个单词
27             /*if(!map.containsKey(key)) {  //查看是否存在该单词
28                 map.put(key, 1);
29             } else {  //存在
30                 map.put(key, map.get(key)+1);
31             }*/
32             Integer value = map.get(key);
33             if(null == value) {  //不存在
34                 map.put(key, 1);
35             } else {
36                 map.put(key, value+1);
37             }
38         }
39         //3.查看每个单词出现的次数
40         Set<String> keySet = map.keySet();
41         //获取迭代器对象
42         Iterator<String> it = keySet.iterator();
43         while(it.hasNext()) {
44             String key = it.next();
45             Integer value = map.get(key);
46             System.out.println(key+"-->"+value);
47         }
48     }
49 }

第2种解决办法:HashMap的value存一个对象

首先,建一个Letter类,包含成员变量name和count,还有构造器,getter与setter方法。这里裴新老师还介绍了一些Eclipse的快捷键。

 1 package com.bjsxt.map;
 2 
 3 /**
 4  * javabean 存储数据 po bo vo 包含setter与getter访问器的类
 5  *
 6  */
 7 public class Letter {
 8     private String name;  //单词
 9     private int count;  //次数
10     
11     //alt+/  快捷键 生成空构造器
12     public Letter() {
13     }
14     
15     public Letter(String name) {
16         super();
17         this.name = name;
18     }
19     
20     //alt+shift+s --> o  快捷键 生成带参构造器
21     public Letter(String name, int count) {
22         super();
23         this.name = name;
24         this.count = count;
25     }
26 
27     //setter与getter
28     public static void main(String[] args) {
29         
30     }
31 
32     public String getName() {
33         return name;
34     }
35 
36     public void setName(String name) {
37         this.name = name;
38     }
39 
40     public int getCount() {
41         return count;
42     }
43 
44     public void setCount(int count) {
45         this.count = count;
46     }
47 }

然后,我们进行分拣存储:

 1 package com.bjsxt.map;
 2 
 3 import java.util.HashMap;
 4 import java.util.Iterator;
 5 import java.util.Map;
 6 import java.util.Set;
 7 
 8 /**
 9  * 分拣存储:1:N
10  * 统计单词出现的次数
11  * this is a cat and that is a mice and where is the food ?
12  * 思路
13  * 1.分割字符串
14  * 2.分拣存储
15  * 3.按要求查看单词出现的次数
16  * 4.加入面向对象
17  * 
18  *
19  */
20 public class MapDemo02 {
21     public static void main(String[] args) {
22         //1.分割字符串
23         String[] arr = "this is a cat and that is a mice and where is the food ?".split(" ");
24         //2.分拣存储
25         Map<String,Letter> map = new HashMap<String,Letter>();
26         for(String key:arr) {
27             /*
28             //第一次查看是否 存在袋子
29             if(!map.containsKey(key)) {  //不存在
30                 map.put(key, new Letter(key));  //准备好袋子
31             }
32             //获取袋子
33             Letter value = map.get(key);
34             value.setCount(value.getCount()+1);  //装东西
35             */
36             Letter value = map.get(key);
37             if(null==value) {
38                 value = new Letter(key);
39                 map.put(key, value);
40             }
41             value.setCount(value.getCount()+1);  //装东西
42         }
43         //3.查看每个单词出现的次数
44         for(String key:map.keySet()) {
45             Letter value = map.get(key);
46             System.out.println(key+"-->"+value.getCount());
47         }
48         
49     }
50 }

 

posted on 2018-01-19 22:13  爱游泳的小飞象  阅读(190)  评论(0编辑  收藏  举报

导航