A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 雨来 高级黑马   /  2015-11-2 22:53  /  340 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. import java.util.*;
  2. class  ArrayT
  3. {
  4. public static void main(String[] args)
  5. {
  6.   //System.out.println("Hello World!");
  7.   TreeSet<String>ts=new TreeSet<String>(new LenComparator());//按照LenComparator进行排序
  8.   ts.add("abc144");
  9.   ts.add("ab3c2");
  10.   ts.add("Ab3c2");
  11.   ts.add("abceee3");
  12.   ts.add("abc3333eee4");
  13.   Iterator<String> it=ts.iterator();//获得一个迭代器
  14.   while (it.hasNext())
  15.   {
  16.    String s=it.next();
  17.    
  18.    sop(s);
  19.   }
  20. }
  21. public static void sop(Object obj)//封装打印
  22. {

  23.    System.out.println(obj);
  24. }
  25. }
  26. class LenComparator implements Comparator<String>//复写Comparator接口的compare方法
  27. {
  28. public int compare(String  c1, String  c2)
  29. {
  30.    // String s1=(String)c1;
  31.     //String s2=(String )c2;
  32.     int num=new Integer(c2.length()).compareTo(new Integer(c1.length()));//compareTo比较字符串的长度
  33.     if(num==0)//如果长度相等  则两个字字符串的ASCII 码Unicode 值
  34.      return c2.compareTo(c1);
  35.     return num;//否则按照元素的长度排序
  36. }
  37. }
复制代码

为什么这里的c1和c2的位置一换 输出的结果  长度最长的在上面
  int num=new Integer(c2.length()).compareTo(new Integer(c1.length()));//compareTo比较字符串的长度  字符串长度排序
    if(num==0)//如果长度相等  则两个字字符串的ASCII 码Unicode 值
     return c2.compareTo(c1);  //元素Unicode值排序
    return num;//否则按照元素的长度排序

3 个回复

倒序浏览
查了API 里是这样说的
比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
在前面的描述中,符号 sgn(expression) 表示 signum 数学函数,根据 expression 的值为负数、0 还是正数,该函数分别返回 -1、0 或 1。

实现程序必须确保对于所有的 x 和 y 而言,都存在 sgn(compare(x, y)) == -sgn(compare(y, x))。(这意味着当且仅当 compare(y, x) 抛出异常时 compare(x, y) 才必须抛出异常。)

回复 使用道具 举报
如果 int num=new Integer(c2.length()).compareTo(new Integer(c1.length()));//compareTo
如果num=0、num=1、num=-1;  如果  比较的结果是1说明 c2 也就是集合里的就一个元素是大于 第2个元素 c1再和其它的元素比较  确定就从长度最长的向下排列    如果我们换了位置说明是 从长度最短的开始排列 也就是  长度短的在关面吗?我还 是有点晕
回复 使用道具 举报
为什么已经比较了第一次的值 num是0呢

QQ截图20151102234540.png (165.23 KB, 下载次数: 3)

调试的结果

调试的结果
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马