統計文字列内の各文字が表示される個数を並べ替えます.
2030 ワード
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)の具体的な応用である.