1. 程式人生 > >黑馬程式設計師-----筆記整理(java基礎十----集合)

黑馬程式設計師-----筆記整理(java基礎十----集合)

練習需求:

 * "fdgavcbsacdfs" 獲取該字串中,每一個字母出現的次數。

 * 要求列印結果是:a(2)b(1)...;

importjava.util.Iterator;

importjava.util.Map;

importjava.util.TreeMap;

/*

 * 練習

 * "fdgavcbsacdfs" 獲取該字串中,每一個字母出現的次數。

 * 要求列印結果是:a(2)b(1)...;

 * 思路:

 * 對於結果的分析發現,字母和次數之間存在著對映關係。而且這種關係很多。

 * 很多就需要儲存,能儲存對映關係的容器有陣列和Map集合。

 * 關係一方式中是有序編號嗎?有就使用陣列,沒有!那就是使用Map集合。

 * 又發現可以保證唯一性的一方具備著順序如a b c.....

 * 所以可以使用TreeMap集合。

 * 

 * 這個集合中應該儲存的是字母和次數的對應關係。

 * 

 * 1,因為操作的是字串中的字母,所以先將字串變成一個字元陣列。

 * 2,遍歷字元陣列,用每一個字母作為鍵去查Map集合這個表。

 * 如果該字母鍵不存在,就將該字母作為鍵1作為值儲存到Map集合中,代表出現一次。

 * 如果該字母鍵存在,就將該字母鍵對應值取出並自增,再將該字母和自增後的值儲存到Map集合中,

 * 鍵相同值會覆蓋,這樣就記錄住了該字母的次數。

 * 3,遍歷結束,Map集合就記錄所有字母的出現的次數。

 */

public class MapTest1 {

    /**

     * @param args

     */

    public static void main(String[] args) {

       String s = "fdgavcbsacdfs";

       String str = getCharCount(s);

       System.out.println(str);

    }

    public static String getCharCount(String s) {

       //將字串變成陣列

       char []  ch = s.toCharArray();

       //建立Map集合,通過迴圈來記錄住出現的字元和次數來對Map集合查表,沒有出現的字元就儲存,出現的字元就繼續自增value值

       //看輸出的結果是有序的列印,因此可以用TreeMap來完成

       Map<Character,Integer> map = new TreeMap<Character,Integer>();

       for (int i = 0; i < ch.length; i++) {

           Integer value = map.get(ch[i]);

           if(value==null){

              map.put(ch[i], 1);

           }

           else

              map.put(ch[i], value+1);

       }

       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+")");

       }

       return sb.toString();

    }

}

練習:

將"asjd+    5568a sd SAAA Aas77dfffwe"字母出現的次數打印出來

要求列印結果是:a(2)b(1)...;

importjava.util.Iterator;

importjava.util.Map;

importjava.util.TreeMap;

public class MapTest3 {

    /*

     * 需求:

     * "asjd    5568a sd SAAA Aas77dfffwe"獲取該字串中,每一個字母出現的次數

     * 要求列印結果是:a(2)b(1)...;

     */

    /**

     * @param args

     */

    public static void main(String[] args) {

       String str = "asjd+    5568a sd SAAA Aas77dfffwe";

       String s = getCharCount(str);

       System.out.println(s);

    }

    public static String getCharCount(String str) {

       //將字串變成陣列

       char [] chs = str.toCharArray();

       //建立以個Map集合,通過迴圈來查詢Map集合表。

       Map<Character,Integer> map = new TreeMap<Character,Integer>();

       for (int i = 0; i < chs.length; i++) {

           //判斷一下,如果不大於或等於裡面裡面的字元就不列印,排除了裡面的符號和空格

           if(!(chs[i]>='a' && chs[i]<='z' || chs[i]>='A' && chs[i]<='Z'))

              continue;

           Integer value = map.get(chs[i]);

           if(value==null){

              map.put(chs[i],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> it = map.keySet().iterator();

       while(it.hasNext()){

           Character key = it.next();

           Integer value = map.get(key);

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

       }

       return sb.toString();

    }

}