其实楼主想实现的就是按照值来排序,而非键来排序。由于TreeMap只能对key进行排序,所以要想实现按值排序,需要转换思维。不得不说,楼主的思维方法很不错。
程序有点乱,尤其是注释后边的一点,也可以看出的确如楼主所说,楼主在Map.Entry<String,Integer>这方面的知识上掌握的不是多牢固。我试着修改了一下你的程序。
希望能对你有所帮助。复制代码
- import java.util.*;
- public class Test14
- {
- public static void main(String []args){
- String str=StringTool.containString("ahellodsaf");
- System.out.println(str);
- StringTool.StringCount(str);
- }
- }
- class StringTool
- {
- public static String containString(String s2){
- String s1="sdfg,hellozx,sdfcv-waadfa,fsasdfxcvdf";
- String xs=null;
- flag:
- for(int i=0;i<s1.length();i++){
- for(int start=0,end=s1.length()-i;end!=s1.length()+1;start++,end++){
- String temp=s1.substring(start,end);
- if(s2.contains(temp)){
- //System.out.println(temp);
- xs=s1.substring(0,start)+""+s1.substring(end,s1.length());
- //System.out.println(xs);
- break flag;
- }
- }
- }
- return xs;
- }
- public static void StringCount(String str){
- char []a=str.toCharArray();
- Map<Character,Integer> map=new TreeMap<Character,Integer>();
- for(int i=0;i<a.length;i++){
- if(a[i]>'a'&&a[i]<'z'||a[i]>'A'&&a[i]<'Z'){
- if(map.containsKey(a[i])){
- int temp=map.get(a[i]);
- temp+=1;
- map.put(a[i],temp);
- }else{
- map.put(a[i],1);
- }
- }
- }
- //*************************************************************
- //一下是按照楼主的思路修改的。
- Set<Map.Entry<Character,Integer>> me = map.entrySet();
- StringBuilder sb=new StringBuilder();
- List<Map.Entry<Character,Integer>> list=new ArrayList<Map.Entry<Character,Integer>>();
- list.addAll(me);
- Collections.sort(list,new MyComparator());//匿名内部类太乱,最起码我看着不爽,所以我把比较器拿出来
- //单独封装成了类MyComparator,作用是实现按照值来排序
- System.out.println(list);//输出按值比较后的list列表
- Iterator<Map.Entry<Character,Integer>> it=list.iterator();
- while(it.hasNext()){
- Map.Entry<Character,Integer>ch=it.next();
- Character key=ch.getKey();
- Integer value=ch.getValue();
- sb.append(key+"("+value+")");
- }
- System.out.println(sb);
- }
- }
- class MyComparator implements Comparator<Map.Entry<Character,Integer>>
- {
- public int compare(Map.Entry<Character,Integer> me1,Map.Entry<Character,Integer> me2)
- {
- //按值来比较,me2放前面,按照从大到小排列
- int num = new Integer(me2.getValue()).compareTo(new Integer(me1.getValue()));
- if(num==0)
- return me2.getKey().compareTo(me1.getKey());//当值相同时,按键比较
- return num;
- }
- }
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |