题目:将一个字符串“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;
- }
- }
复制代码 |
|