統計文字列内の各文字が表示される個数を並べ替えます.



public class WordCount {

	public static void main(String[] args) {
		String words = "ilikecubailikejavaibmoraclesun";
		
		StringCounter strCounter = new StringCounter();
		String strTem;
		for(int i = 0; i < words.length(); i++) {
			strTem = String.valueOf(words.charAt(i));
			strCounter.count(strTem);
		}

		//getSortedHashtableByValue(strCounter);
		for(Map.Entry<String, Integer> entry : getSorted(strCounter)) {
			System.out.println(entry.getKey() + "------------" + entry.getValue());
		}
	}
	
	// 
	static class StringCounter extends HashMap<String,Integer> {
		public void count(String str) {
			Integer num = get(str);
			put(str,num == null ? 1 : num + 1);
			// ?
			
			/*if(num == null) 
				put(str,1);
			else 
				put(str,num+1);*/
		}
	}
	
	// 
	static Map.Entry<String, Integer>[] getSorted(Map<String,Integer> m) {
		Set set = m.entrySet();
		Map.Entry<String, Integer>[] entries = 
			(Map.Entry<String, Integer>[]) set.toArray(new Map.Entry[set.size()]);
		//Comparator  
		Arrays.sort(entries, new Comparator<Map.Entry<String, Integer>>() {
			@Override
			public int compare(Entry<String, Integer> entry1, 
					Entry<String, Integer> entry2) {
				Integer in1 = entry1.getValue();
				Integer in2 = entry2.getValue();
				return in1.compareTo(in2);
			}
		} );
		return  entries;
	}
}

   1.このウィジェットでは,ネストクラス(nested clsss)の使用があり,具体的にはStringCounterクラスである.このプログラムでは、StringCounterは内部クラスであり、staticとして生命を捧げている.理由は2つある.a.周辺クラスと通信する必要はなく、周辺クラスのメンバーにアクセスする必要はない.b.ネストされたクラスのオブジェクトを作成するのは便利で、その周辺クラスのオブジェクトは必要ありません.
   2.統計ではhashmapを使うことを思いついた.mapの器用さ.
   3.mapのデータをソートします.ここではComparatorを使いました.これはポリシーモード(strategy)の具体的な応用である.