黑马程序员技术交流社区
标题:
分享一个面试题....
[打印本页]
作者:
苏志伟
时间:
2011-10-14 19:22
标题:
分享一个面试题....
题目:将一个字符串“abdfafdsafa”的各个字符出现的次数排序,如果字符出现次数相同,那么在按照字典顺序排序!
import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;
public class StringManager {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//我的解题思路有点麻烦呢!呵呵,分两步,
//先code和值的entry装进一个map集合,然后再给他进行排序。
//原因:有了值才可以进行排序啊!呵呵
TreeMap<Character, Integer> codeEntry=new TreeMap<Character,Integer>();
String srcString="abadcdffbaeba";//抱歉没有粉状成方法,在这里是字符串!
for(int i=0;i<srcString.length();i++){
if(codeEntry.containsKey(srcString.charAt(i))){
int entryvalue=codeEntry.get(srcString.charAt(i))+1;
codeEntry.put(srcString.charAt(i), entryvalue);
}
else{
codeEntry.put(srcString.charAt(i), 1);
}
}
System.out.println(codeEntry);//第一步就做好了!
Map<Character, Integer> valueMap=mapSort(codeEntry);//调用方法!
System.out.println(valueMap);//打印Map;
//接下来进行第二步!将entry在装进一个集合,那么在装得时候就得给他一个比较器,进行比较了!
}
public static Map<Character, Integer> mapSort(final Map<Character,Integer> srcMap){
//此处注意,应为我们使用了匿名内部类,创建了一个比较器,所以形参必须是final类型的。
//我们知道在treeMap进行比较的时候,是用的键来进行排序的。但是现在我们要用值进行排序,所以只能将srcmap传进来,获取相应的值来进行排序。
TreeMap<Character,Integer> sortUtil = new TreeMap<Character,Integer>(new Comparator<Character>(){
public int compare(Character o1, Character o2) {
// TODO Auto-generated method stub
int result=srcMap.get(o1)-srcMap.get(o2);
return result==(int)0?o1.compareTo(o2):result;//为防止数值大小一样,在对键值进行排序。
}
});
//下一步,将srcmap中的值全都传入sortutil ,然后将这个数组返回。
sortUtil.putAll(srcMap);
return sortUtil;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2