首先需要了解下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}