문자열의 각 문자에 나타나는 개수를 통계하고 정렬합니다


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) 의 구체적인 응용이다.

좋은 웹페이지 즐겨찾기