黑马程序员技术交流社区

标题: TreeSet问题 [打印本页]

作者: xibozglr    时间: 2014-3-26 15:17
标题: TreeSet问题
  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???求解
作者: xibozglr    时间: 2014-3-26 15:24
重新写了一下比较器,为什么又正常了??代码没错啊
作者: 透过生活    时间: 2014-3-26 15:39

                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;
                        }
                });
我用的内部类写的 这比较简便。

作者: 焚雨成灰    时间: 2014-3-26 15:56
  1. String str1=(String)o1;
  2.                 String str2=(String)o1;
复制代码


怎么是两个o1 你太不小心了吧
作者: MVP    时间: 2014-3-26 17:47
细节问题
作者: 年轻的老头    时间: 2014-3-26 20:54
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




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