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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xibozglr 中级黑马   /  2014-3-26 15:17  /  1090 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.Comparator;


  2. public class CompartorByLength implements Comparator {

  3.         @Override
  4.         public int compare(Object o1, Object o2) {
  5.                 String str1=(String)o1;
  6.                 String str2=(String)o1;
  7.                 //比较长度
  8.                 int tmp=str1.length()-str2.length();
  9.                 //长度相同,在按字典顺序
  10.                 return tmp==0?str1.compareTo(str2):tmp;
  11.         }

  12. }
复制代码

  1. import java.util.Iterator;
  2. import java.util.Set;
  3. import java.util.TreeSet;


  4. public class TreeSetTest {

  5.         public static void main(String[] args) {
  6.                 /*练习4:对多个字符串(不重复)按照长度排序(由短到长)
  7.                  * 思路:
  8.                  * 1.多个字符串,需要容器存储
  9.                  * 2.选择哪个容器?字符串是对象,可以选择集合,而且不重复,选择Set集合
  10.                  * 3.还需要排序,可以选择TreeSet集合
  11.                  *
  12.                  */
  13.                
  14.                 sortByLength();
  15.         }
  16.        
  17.         public static void sortByLength(){
  18.                 Set set=new TreeSet(new CompartorByLength());
  19.                
  20.                 set.add("abcd");
  21.                 set.add("nba");
  22.                 set.add("zz");
  23.                 set.add("wcba");
  24.                 set.add("xixixi");
  25.                
  26.                 for(Object obj:set){
  27.                         System.out.println(obj);
  28.                 }
  29.                
  30.         }

  31. }
复制代码


输出结果怎么只有abcd???求解

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 神马都是浮云

查看全部评分

5 个回复

倒序浏览
重新写了一下比较器,为什么又正常了??代码没错啊
回复 使用道具 举报

                TreeSet ts = new TreeSet(new Comparator(){
                        public int compare(Object o1,Object o2)
                        {
                                String s1 =(String)o1;
                                String s2 =(String)o2;

                                int num = new Integer(s1.length()).compareTo(new Integer(s2.length()));

                                if(num ==0)
                                        return s1.compareTo(s2);
                                return num;
                        }
                });
我用的内部类写的 这比较简便。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
  1. String str1=(String)o1;
  2.                 String str2=(String)o1;
复制代码


怎么是两个o1 你太不小心了吧
回复 使用道具 举报
细节问题
回复 使用道具 举报
public V put(K key, V value) {         Entry<K,V> t = root;         if (t == null) {             compare(key, key); // type (and possibly null) check              root = new Entry<>(key, value, null);             size = 1;             modCount++;             return null;         } 加上String str1=(String)o1;String str2=(String)o1;所以输出结果怎么只有abcd
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马