Java集合框架練習(一)
阿新 • • 發佈:2019-01-04
環境:Notpad ++ 6.0 + JDK 6.0.31
問題:
編寫這樣一個程式,該程式建立了在某一字串中出現的字元索引(即,哪個字元出現在字串中的哪個地方)。從命令列讀取該字串。例如,執行該程式:
>java Concordance Hello world
將得到結果為:
{d=[9],o=[4,6],r=[7],w=[5],H=[0],l=[2,3,8],e=[1]}
解決:利用HashMap的對映關係解決。
程式碼:
方法一:
import java.util.*; public class Concordance { Map map = new HashMap();//建立HashMap物件 //構造方法 public Concordance(String s) { for (int i = 0; i < s.length(); ++ i) add(s.charAt(i), i); } public void add(char c, int pos) { Character key = new Character(c);//獲取Key List l = (List)map.get(key);//通過key找到Value //如果List為空,將key和l的對映放到Map中 if (l == null) { l = new ArrayList(); map.put(key, l); } l.add(new Integer(pos));//把字元位置添到List中 } public static void main(String args[]) { StringBuffer sb = new StringBuffer();//建立StringBuffer物件 for (int i = 0; i < args.length; ++ i) sb.append(args[i]);//將命令列引數加到StringBuffer中 Concordance concordance = new Concordance(sb.toString()); System.out.println(concordance.map);//列印結果 } }
方法二:
import java.util.HashMap; import java.util.Iterator; public class Concordance{ /** * @param args * @author Wentasy * @since 2012年4月23日17:36:53 */ public static void main(String[] args) { countChar(args); } public static void countChar(String[] args){ StringBuffer sb = new StringBuffer(); for(int i = 0; i < args.length; ++ i){ sb.append(args[i]); } String str = sb.toString(); HashMap<Character, String> map = new HashMap<Character, String>();//建立HashMap物件 for (int i = 0; i < str.length(); i++) { Character ch = new Character(str.charAt(i));//擷取第i個位置的字元 String oldVal = map.put(ch, i + "");//把出現次數放到Map中 //put方法返回與 key 關聯的舊值;如果 key 沒有任何對映關係,則返回 null。(返回 null 還可能表示該對映之前將 null 與 key 關聯。) if (oldVal != null){ map.put(ch, oldVal + "," + i);//如果不為空,將加1的舊指放到Map中 } } System.out.println(map);//列印存放字元和出現次數的對映關係 } }
執行效果截圖:
方法一:
方法二: