Java 集合22 Map练习

需求:记录一个字符串中出现的字符的次数
要求的输出:a(1)b(2)f(5)..
思路:
1.定义字符串,将字符串转化为数组
2.创建Map 集合
3.遍历数组,将遍历到的字符拿到Map 中查找是否有对应的值。有对应的值就对应的值加1,再存入集合。没有就将字符添加到几何中
4.将集合转化为字符串输出
代码:

package Collection;
import java.util.*;
/*
统计一串字符串中每一个字符出现的次数
字母和出现次数有对应关系  ——————Map
*/
public class MapTest_Map {
    public static void main(String[] args){
        //定义字符串
        String str = "hdiwdiqodiw";
        String s= getCharCount(str);
        System.out.println(s);
    }
    public static String getCharCount(String str){

        //将字符串转换为数组
        char[] arr = str.toCharArray();
        //创建Map 集合  输出有序——HashMap
        Map<Character,Integer>  map = new TreeMap<Character, Integer>();
        //遍历数组
        for(int i=0;i<arr.length;i++){
            Integer in = map.get(arr[i]);
          /*if(in==null){
              map.put(arr[i],1);
          }
          else{
              map.put(arr[i],++in);
          }*/
            if(in==null){
            //判断遍历到的字母是否在集合中存在
                in=1;
            }
            else{
                in++;
            }
            map.put(arr[i],in);
        }
        return map.toString();
    }
}

运行结果:
{d=3, h=1, i=3, o=1, q=1, w=2}
要将运行结果转化为:a(1)b(2)f(5)..

完整版代码:

package Collection;
import java.util.*;
/*
统计一串字符串中每一个字符出现的次数
字母和出现次数有对应关系  ——————Map
思路:
1.定义字符串,将字符串转化为数组
2.创建Map  集合
3.遍历数组,将遍历到的字符拿到Map  中查找是否有对应的值。有对应的值就对应的值加1,再存入集合。没有就将字符添加到几何中
4.将集合转化为字符串输出
 */
public class MapTest_Map {
    public static void main(String[] args){
        //定义字符串
        String str = "hdiwdiqodiw";
        String s= getCharCount(str);
        System.out.println(s);
    }
    public static String getCharCount(String str){

        //将字符串转换为数组
        char[] arr = str.toCharArray();
        //创建Map 集合  输出有序——HashMap
        Map<Character,Integer>  map = new TreeMap<Character, Integer>();
        //遍历数组
        for(int i=0;i<arr.length;i++){
          //判断必须是字母
            if(!(arr[i]>='a'&&arr[i]<='z'||arr[i]>='A'&&arr[i]<='Z')){
            //不是字母就直接结束本次循环
                continue;
            }
            Integer in = map.get(arr[i]);
          /*if(in==null){
              map.put(arr[i],1);
          }
          else{
              map.put(arr[i],++in);
          }*/
            if(in==null){
                in=1;
            }
            else{
                in++;
            }
            map.put(arr[i],in);
        }
        //将结果转化为:a(5)b(1)...

        return mapToString(map);
    }
    /*
        思路:
        map  中无论有多少数据,什么类型最后都要变成字符串
        使用容器:StringBuffer  如果是单线程,建议使用StringBuilder
    */
    public static String mapToString(Map<Character,Integer> map){
        //明确容器
        StringBuilder sb = new StringBuilder();
        //遍历集合
        for(Character ch : map.keySet()){
            Integer value = map.get(ch);
            sb.append(ch+"("+value+")");
        }
        return sb.toString();
    }
}
//运行结果:d(3)h(1)i(3)o(1)q(1)w(2)

Map 集合的使用情况:
1.字母和次数有对应的关系,分析问题时出现了对应关系就要考虑使用Map
2.如果对应关系中出现了有序的数字,就考虑使用数组,但是长度一定是固定的
3.如果对应关系个数不确定还是使用集合Map

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值