문자열의 각 문자에 나타나는 개수를 통계하고 정렬합니다
2074 단어 여러 지식을 포함하는 애플릿
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.이 애플릿에는 StringCounter 클래스와 같이 네스트된 클래스(nested clsss)가 사용됩니다.이 프로그램에서StringCounter는 내부 클래스이고 그 생명을static으로 한다. 원인은 두 가지가 있다. a. 외부 클래스와 통신할 필요가 없고 외부 클래스의 구성원을 방문할 필요가 없다.b. 플러그인 클래스의 대상을 만드는 것이 비교적 편리하고 외부 클래스의 대상이 필요하지 않다.
2.통계를 낼 때hashmap을 쓸 생각을 했어요.맵의 교묘한 사용.
3.맵의 데이터를 정렬합니다.Comparator가 여기에 사용됩니다.이것은 정책 모드 (strategy) 의 구체적인 응용이다.