根据LS的提示成功实现,受教了代码如下:[code]package com.itcast.bank;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Test2 {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
String str = "aaaaabbbccccddddddddeeeee";
// key保存字符,value保存出现的次数
Map<String, Integer> map = new HashMap<String, Integer>();
for (int i = 0; i <= str.length() - 1; i++) {
String subVal = str.substring(i, 1 + i);
boolean flag = false; // 标示一个字符是否处理过。
for (String key : map.keySet()) {
// 如果有相同的字符 value + 1 否则把字符存入map
if (key.equals(subVal)) {
map.put(key, map.get(key) + 1);
flag = true; // 字符标示为处理过
}
}
// 如果字符没有处理过就在这里处理
if (!flag) {
map.put(subVal, 1);
}
}
Map.Entry[] entries = getSortedHashtableByValue(map);
for (int i=0; i<entries.length; i++){
System.out.println(entries[i]);
}
}
public static Map.Entry[] getSortedHashtableByValue(Map map) {
Set set = map.entrySet();
Map.Entry[] entries = (Map.Entry[])set.toArray(new Map.Entry[set.size()]);
Arrays.sort(entries, new Comparator(){
public int compare(Object arg0, Object arg1){
Long key1 = Long.valueOf(((Map.Entry) arg0).getValue().toString());
Long key2 = Long.valueOf(((Map.Entry) arg1).getValue().toString());
return key1.compareTo(key2);
}
});
return entries;
}
}[/code] |