黑馬程式設計師-----筆記整理(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();
}
}