集合框架--Map集合之记录字母次数练习

24 篇文章 0 订阅

练习:“fdgavcbsacdfs”获取该字符串中每一个字母出现的次数。

分析:字母和次数之间存在着映射关系,而且这种关系很多,就需要能存储映射关系的容器:数组和Map集合。关系中一方如果是有序编号,用数组;否则map集合。本例中使用Map集合。

又发现可以保证唯一性的一方具备顺序如a、b、c......所以使用TreeMap集合。


这个集合中最终应该存储的是字母和次数的对应关系:

1、因为操作的是字符串中的字母,所以先将字符串变成字符数组。

2、遍历字符数组,用每一个字母作为键去查Map集合这个表,如果该字母键不存在,就将该字母作为键,1作为值存储到map集合中;如果该字母键存在,就将该字母键对应值取出并+1,再将该字母和+1后的值存储到map集合中,键相同值会覆盖,这样就记录了该字母的次数。

3、遍历结束,map集合就记录了所有字母出现的次数。

import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

public class MapTest{
	public static void main(String[] args){
		String str="fdgavcbsacdfs";
		String s=getCharCount(str);

		System.out.println(s);
	}

	public static String getCharCount(String str){
		//将字符串变成字符数组
		char[] chs=str.toCharArray();
			
		//定义map集合表
		Map<Character,Integer> map=new TreeMap<Character,Integer>();

		for(int i=0;i<chs.length;i++){    //遍历
			//将数组中的字母作为键去查map表
			Integer value=map.get(chs[i]);
			
			//判断值是否为null
			/*
			if(value==null){
				map.put(chs[i],1);
			}else{
				map.put(chs[i],value+1);
			}	
			*/
			//以上代码可用下面的替换:
			int count=1;
			if(value!=null)	{
				count=value+1;
			}	
			map.put(chs[i],count);
		}
		return mapToString(map); 
	}

	private static String mapToString(Map<Character,Integer> map){
		StringBuilder sb=new StringBuilder();
		
		Iterator<Character> it=map.keySet().iterator();

		while(it.hasNext()){
			Character key=it.next();
			Integer value=map.get(key);

			sb.append(key+"("+value+")");

			
		}
<span style="white-space:pre">		</span>return sb.toString();
	} 
}
运行结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值