zoukankan      html  css  js  c++  java
  • Map集合重要练习

    重要练习:将字符串中的字母按如下格式显示:

    a(1)b(2)......

    代码及思路如下:

    /*
    获取字符串中字母的次数,并打印出如下格式a(1)b(2)c(3)......
    
    
    思路:
    先定义一个方法,将该功能进行封装.
    1.首先将字符串转换成字符数组 方法是toCharArray();
    2.定义一个map容器用来接收每个字符, 因为结果是有序的可以使用TreeMap
    3.遍历字符数组 for循环.
        将字母作为 键 去map集合中去查询该字母,如果返回null,说明map集合中没有该字母,那么将该字母和1存入到map集合中去,
        如果返回的不是null,说明此时的map集合中已经有了该字母,那么在map集合中该字母对应的次数自增1,然后将该字母和自增后的次数存入到map集合中去.
        存入后会覆盖原先的次数.
    3将map集合中的数据按指定形式打印出来
        指定形式:
        1.定义一个容器.StringBuilder缓冲区可以存放任何数据的形式,通过Map集合的KeySet方法或者entrySet方法获取map集合中的键值或者其映射关系
        通过keySet的get(key)方法获取map集合中的value 或者entrySet的方法getKey()方法和getValue()方法获取对应的键和值.
        
        2.最后将键和值通过 StringBuilder的append方法添加进缓冲区,并打印. 由于StringBuilder和String不是同一个类,因此return sb的时候需要
        写上toString--->return sb.toString();
    
    */
    
    import java.util.*;
    
    class MapCharTest
    {
        public static void main(String [] args)
        {
            String s = myCharCount("aabbccddedsf");
            sop(s);
        }
        
        public static String myCharCount(String str)
        {
            //将字符串转换成字符数组
            char [] chs = str.toCharArray();
            
            //定义一个map集合
            TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();
            
            //遍历字符数组
            for(int x = 0; x<chs.length; x++)
            {
                //将字母作为 键 去查找对应的 值
                Integer value = tm.get(chs[x]);
                
                //去除不是字母的其他字符.
                if(!(chs[x]>='a'&&chs[x]<='z' || chs[x]>='A'&& chs[x]<='Z'))
                    continue;
                    
                
                //判断 值 是否存在
                if(value==null)
                    tm.put(chs[x],1);
                else
                {
                    value = value+1;
                    tm.put(chs[x],value);
                }
            }
        //    sop(tm);    
        
            //创建一个缓冲区
            StringBuilder sb = new StringBuilder();
            
            /*
            //第一种Map取出方式 keySet方法
            Set<Character> keySet = tm.keySet();
            
            迭代set集合中的键集
            Iterator<Character> it = keySet.iterator();
            
            while(it.hasNext())
            {
                Character key = it.next(); //获取键
                Integer value = tm.get(key); //通过键获取对应的 值
                
                sb.append(key+"("+value+")"); //将键和值添加进缓冲区中
                
            }
            */
        
            //Map集合第二种取出方式:entrySet
            Set<Map.Entry<Character,Integer>> entrySet = tm.entrySet();
            
            Iterator<Map.Entry<Character,Integer>> it = entrySet.iterator();
            
            while(it.hasNext())
            {
                Map.Entry<Character,Integer> me = it.next();
                
                Character key = me.getKey();
                Integer value = me.getValue();
                
                sb.append(key+"("+value+")");
            }
            
            return sb.toString(); //将StringBuilder按String形式打印出来.
        
        }
        
        public static void sop(Object obj)
        {
            System.out.println(obj);
        
        }
    }    
        
  • 相关阅读:
    Hrbust-1492 盒子(二分图最大匹配)
    数据结构——二叉树的建立和遍历(递归建树&层序遍历建树)
    HDU 1710 二叉树遍历
    HDU 2891
    HDU 2895 贪心 还是 大水题
    POJ 2896 另解暴力
    POJ 2896 AC自动机 or 暴力
    HDU 1714 math
    POJ 1328 贪心
    POJ 2109 巧妙解法
  • 原文地址:https://www.cnblogs.com/jerryho/p/4759013.html
Copyright © 2011-2022 走看看