Java基礎學習之Map練習
阿新 • • 發佈:2018-11-01
在學習Map時做了一道有意思的練習題,在這裡記錄一下。
題目的大概意思是:
輸入任意一串字串,如aaabbbccsghedkok,統計字串中每一個字元出現的次數,輸出結果的形式為:a(1)b(2)…。
思路:
字母和次數之間存在對映關係,所以使用map進行儲存。輸出的字母之間是有順序的,所以採用TreeMap(這裡補充一下知識點:Map介面的實現類有兩種:HashMap和TreeMap。HashMap的底層資料結構為雜湊表,能夠保證元素的唯一性。TreeMap的底層資料結構是二叉樹,不僅能保證元素的唯一性,還可以進行排序)。
步驟:
- 因為操作的是字串的字母,所以先將字串變成字元陣列;
- 遍歷字元陣列,用每一個字母作為鍵去查Map集合的表
如果字母鍵不存在,就將該字母作為鍵 1作為值儲存到Map中
如果該字母鍵存在,就將該字母鍵對應的值取出再加1,再將該字母和對應的值儲存到Map集合中。鍵相同值會覆蓋。 - 遍歷結束,Map集合中已經儲存了對映關係。
儲存的時候結果長度是可變的,所以不採用String,採用StringBuilder.
程式碼如下:
import java.util.Iterator; import java.util.Map; import java.util.TreeMap; public class Test1 { public static void main(String[] args) { String str="aaabbbccsghedkok"; String s=getCharCount(str); System.out.println(s); } private static String getCharCount(String str) { //1.將字串變成字元陣列 char[] chs=str.toCharArray(); //2.建立一個map集合 Map<Character, Integer> map=new TreeMap<Character, Integer>(); //Map<char,int>這樣是不對的,因為char與int是資料型別,而不是物件型別,所以用其包裝類 //3.遍歷 for(int i=0;i<chs.length;i++){ if(!(chs[i]>='a' && chs[i]<='z')){ continue; //如果不是字母則跳過 } //如果傳進來的鍵沒有對應的值,則返回null //將陣列中的字母作為鍵去查詢map表 Integer value=map.get(chs[i]); /*int count=1; //判斷是否為空 if(value!=null){ count=value+1; } map.put(chs[i], count);*/ if(value==null){ map.put(chs[i],1); //字母第一次出現map中沒有記錄,所以輸出為null,第一次出現設定count為1 }else{ map.put(chs[i],value+1); } } return maptoString(map);//輸出 } private static String maptoString(Map<Character, Integer> map) { StringBuilder sb=new StringBuilder(); Iterator<Character> iterator=map.keySet().iterator(); while(iterator.hasNext()){ Character key=iterator.next(); Integer value=map.get(key); sb.append(key+"("+value+")"); } return sb.toString(); } }