Map集合的简单使用

[java]  view plain  copy
  1. /* 
  2.  * 集合的一些小技巧 
  3.  * 需要唯一吗? 
  4.  *  需要:Set 
  5.  *      需要制定顺序吗? 
  6.  *          需要:TreeSet 
  7.  *          不需要:HashSet 
  8.  *          但是想要一个和存储一致的顺序(有序)LinkedHashSet 
  9.  *  不需要:List 
  10.  *      需要频繁操作吗? 
  11.  *          需要:LinkedList 
  12.  *          不需要:ArrayList 
  13.  * 
  14.  *如何记录每一个容器的结构和所属体系呢? 
  15.  *看名字: 
  16.  *List 
  17.  *  |--ArrayList 
  18.  *  |--LinkedList 
  19.  *Set: 
  20.  *  |--HashSet 
  21.  *  |--TreeSet 
  22.  *后缀名就是该集合所属的体系。 
  23.  *前缀名就是该集合的数据结构。 
  24.  *看到Array:就要想到数据。就要想到查询快,有角标。 
  25.  *看到Link:就要想到链表,就要想到增删快,就要想到add,get,remove+first,last方法 
  26.  *看到Hash:就要想到哈希表,就要想到唯一性,就要想到元素需要覆盖hashCode方法和equals方法 
  27.  *看到tree:就要想到二叉树,就要想到排序,就要想到两个接口Comparable,Comparator. 
  28.  *而且,通常这些常用的集合都是不同步的。 
  29.  */  

[java]  view plain  copy
  1. /* 
  2.  * 练习Map集合的使用 
  3.  * 需求: 
  4.  *  "fdgawcbsacdfs"获取该字符串每一个字母出现的次数,要求打印的结果是:a(2)b(1) 
  5.  * 思路: 
  6.  *  1)对于结果的分析发现,字母和次数之间存在这映射关系,而且这种关系很多。 
  7.  *  2)既然很多就要存储,能存储关系的映射容器有数组和Map集合。 
  8.  *  3)关系一方是有序的编号吗? 不是 
  9.  *  4)那就是使用Map集合。又发现可以保证唯一性的一方具备着顺序如,a,b,c... 
  10.  *  所以可以使用TreeMap集合 
  11.  * 分析: 
  12.  *  这个集合最终应该存储的是字母和次数的对应关系。 
  13.  *  1)因为操作的是字符串的字幕,所以先将字符串变成字符数组 
  14.  *  2)遍历字符数组,用每一个字母作为键去查Map集合这个表。 
  15.  *  2.1)如果字母键不存在,就将该字母作为键,1作为值存储到Map集合中。 
  16.  *  2.2)如果该字母键存在,就将该字母键对应的值取出并+1,再将该字母和+1后的值存储到Map集合中。 
  17.  *  2.3)键相同,值会覆盖。这样就记录住了该字母的次数。 
  18.  *  3)遍历结束,Map集合就记录所有的字幕出现的次数 
  19.  */  
  20. public class MapDemo {  
  21.   
  22.     public static void main(String[] args) {  
  23.           
  24.         String str = "fdgawcbsacdfs";  
  25.         String s = gerCharCounts(str);  
  26.         System.out.println(s);  
  27.     }  
  28.   
  29.     public static String gerCharCounts(String str) {  
  30.         //1.将字符串变成字符数组  
  31.         char[] chs = str.toCharArray();  
  32.         //2.定义一个Map集合  
  33.         Map<Character, Integer> map = new TreeMap<Character,Integer>();  
  34.         //3.将数组中的字母遍历到集合中合  
  35.         for(int i=0;i<chs.length;i++){  
  36.             //作为键值去查Map表  
  37.             Integer value = map.get(chs[i]);  
  38.             int count = 0;  
  39.             //判断是否为空  
  40.             if(value !=null){  
  41.                 count = value;  
  42.             }  
  43.             count++;  
  44.             map.put(chs[i], count);  
  45.         }  
  46.         return mapToStirng(map);  
  47.     }  
  48.   
  49.     private static String mapToStirng(Map<Character, Integer> map) {  
  50.         StringBuilder sb = new StringBuilder();  
  51.         //调用遍历器遍历  
  52.         Iterator<Character> it = map.keySet().iterator();  
  53.         while(it.hasNext()){  
  54.             Character key = it.next();  
  55.             Integer value = map.get(key);  
  56.             sb.append(key+"("+value+")");  
  57.         }  
  58.         return sb.toString();  
  59.     }  
  60.   
  61. }  

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值