map练习小例题

"fdgavcbsacdfs" 获取该字符串中,每一个字母出现的次数。 要求打印结果是:a(2)b(1)...; 思路:
 对于结果的分析发现,字母和次数之间存在着映射关系。而且这种关系很多。 很多就需要存储,能存储映射关系的容器有数组和Map集合。
关系一方式中是有序编号吗?有就使用数组,没有!那就是使用Map集合。 又发现可以保证唯一性的一方具备着顺序如a b c.....
所以可以使用TreeMap集合。
这个集合中应该存储的是字母和次数的对应关系。
1,因为操作的是字符串中的字母,所以先将字符串变成一个字符数组。 2,遍历字符数组,用每一个字母作为键去查Map集合这个表。
如果该字母键不存在,就将该字母作为键1作为值存储到Map集合中,代表出现一次。
如果该字母键存在,就将该字母键对应值取出并自增,再将该字母和自增后的值存储到Map集合中, 键相同值会覆盖,这样就记录住了该字母的次数。
3,遍历结束,Map集合就记录所有字母的出现的次数。

 1 package exmap;
 2 
 3 import java.util.Iterator;
 4 import java.util.Map;
 5 import java.util.Set;
 6 import java.util.TreeMap;
 7 
 8 public class ExMap {
 9 
10     public static void main(String[] args) {
11         // TODO Auto-generated method stub
12 
13         Map<Character, Integer> map = null;
14         map = new TreeMap<Character, Integer>();
15         map.put('a', 0);
16         map.put('b', 0);
17         map.put('c', 0);
18         map.put('d', 0);
19         map.put('f', 0);
20         map.put('g', 0);
21         map.put('s', 0);
22         map.put('v', 0); // 把字符串中有的字母放在TreeMap集合表里面
23 
24         String a = "fdgavcbsacdfs";
25         char[] array = a.toCharArray(); // 把字符串转成字符数组
26         int num = 0;
27         Set<Character> keys = map.keySet();
28         Iterator<Character> iter = keys.iterator();
29         while (iter.hasNext()) {
30             Character str = iter.next();
31             for (int i = 0; i < a.length(); i++) {
32                 if (array[i] == str) {
33                     num = map.get(str) + 1;
34                     map.put(str, num);
35                 }
36             }
37 
38         }
39         Set<Character> keys1 = map.keySet();
40         Iterator<Character> iter1 = keys.iterator();
41         while (iter1.hasNext()) {
42             Character str1 = iter1.next();
43             System.out.print(str1 + "(" + map.get(str1) + ")");
44         }
45 
46     }
47 }

 

posted @ 2017-06-15 10:12  tendo  阅读(481)  评论(0)    收藏  举报