首先需要了解下java的hashmap数据类型:
hashmap是基于哈希表的Map接口的实现。hashmap有两个元素,一个是key(键名),一个是value(键值),就相当于一个字典了,和Python里的字典是一样的。
在一段英文字母中找出每个字母重复数量的实现原理:
将文字中出现的字母,作为键名(key),出现的次数作为键值(value),hashmap中的键名是不能重复的,那么统计这些字母的数量,就变成了统计这些相同键名的数量。
实现方式可以是从第一个字母开始,把字母存到哈希表中去,第一个就是a:1,然后按顺序存第2个字母f:1,如果出现跟前面有的字母重复的话,前面字母的键值就+1,例如afa,遍历到第3个字母的时候,a的键值就变成了2,即a:2,如果遇到空格数字,标点符号,及其他特殊字符就排除掉,不插入,如果遇到标点符号也统计则不需要判断条件,全部都插入即可。
代码如下:
1 import java.util.HashMap; 2
3 4 public class hashmap_examp { 5 6 public static void main(String[] args){ 7 HashMap<String,Integer> map = new HashMap<String,Integer>(); 8 String str="afashfjgjkhlnmash,^566*整数gshkjshgksdfsgdfhjk"; 9 for (int i=0;i<str.length();i++){ 10 char c=str.charAt(i); 11 String key=String.valueOf(c); 12 if(map.containsKey(key)){ 13 Integer value=map.get(key); 14 map.put(key, value+1); 15 } 16 else{ 17 //map.put(key, 1); 统计所有的字符,包括中文 18 if(c>='A'&&c<='Z'||c>='a'&&c<='z'){//利用ascii码去除字符串的数字,空格,标点符号,特殊字符 19 map.put(key, 1); 20 } 21 } 22 } 23 System.out.println(map); 24 } 25 }
输出结果:
{f=4, g=4, d=2, s=6, a=3, n=1, l=1, m=1, j=4, k=4, h=6}