黑马程序员技术交流社区

标题: 怎么写这个比较器 [打印本页]

作者: 郑世光    时间: 2012-9-2 09:25
标题: 怎么写这个比较器
/*
程序要打印出字符串addbbaacc中每个字母出现的次数。要求打印的结果是{a=3, d=2, b=2, c=2},也就是按每
个字母出现的次序排列,而不是按字母表的顺序排列。
程序中不加比较器打印没问题:{a=3, b=2, c=2, d=2},但此顺序不是想要的。加比较器的话,打印得结果就
有问题:{a=1, d=2, b=2, a=2, c=2},想要的结果是{a=3, d=2, b=2, c=2}。请问该比较器Mycom该如何写?
*/
import java.util.*;
class MapDemo3
{
public static void main(String[] args)
{
  Test t=new Test();
  t.setStr("addbbaacc");
  t.print();
}
}

class Test
{
String str;
public void setStr (String str)
{
  this.str=str;
}
public void print ()
{
  char[] ch=str.toCharArray();
  TreeMap<Character,Integer> hm = new TreeMap<Character,Integer>(new Mycom());//加比较器
  
  for (int x=0;x<ch.length ;x++ )
  {
   Integer a=hm.get(ch[x]);
   if (a==null)
   {
    hm.put(ch[x],1);
   }
   else{a=a+1; hm.put(ch[x],a);}
  }
  System.out.println(hm);
}
}

class Mycom implements Comparator<Character>
{
public int compare (Character s1,Character s2)
{
  int a=s1.compareTo(s2);
  if (a==0)
  {
   return 0;
  }
  else return 1;
}
}

作者: 杨震    时间: 2012-9-2 10:45
/*
程序要打印出字符串addbbaacc中每个字母出现的次数。要求打印的结果是{a=3, d=2, b=2, c=2},也就是按每
个字母出现的次序排列,而不是按字母表的顺序排列。
程序中不加比较器打印没问题:{a=3, b=2, c=2, d=2},但此顺序不是想要的。加比较器的话,打印得结果就
有问题:{a=1, d=2, b=2, a=2, c=2},想要的结果是{a=3, d=2, b=2, c=2}。请问该比较器Mycom该如何写?
*/
import java.util.*;
class MapDemo3
{
public static void main(String[] args)
{
   Test t=new Test();
   t.setStr("addbbaacc");
   t.print();
}
}

class Test
{
String str;
public void setStr (String str)
{
   this.str=str;
}
public void print ()
{
   char[] ch=str.toCharArray();
  LinkedHashMap<Character,Integer> hm = new LinkedHashMap<Character,Integer>();//改用这个LinkedHashMap
   
   for (int x=0;x<ch.length ;x++ )
   {
    Integer a=hm.get(ch[x]);
    if (a==null)
    {
     hm.put(ch[x],1);
    }
    else{a=a+1; hm.put(ch[x],a);}
   }
   System.out.println(hm);
}
}

class Mycom implements Comparator<Character>
{
public int compare (Character s1,Character s2)
{
   int a=s1.compareTo(s2);
   if (a==0)
   {
    return 0;
   }
   else return 1;
}
}
作者: 杨震    时间: 2012-9-2 10:48
换成LinkedHashMap,他可以记顺序




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2