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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 906822773 中级黑马   /  2014-7-3 13:31  /  1092 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.*;

class TreeSetTest
{
        public static void main(String[] args)
        {
                 
                TreeSet ts=new TreeSet(new MyComparator());
                ts.add("abcd");
                ts.add("cc");
                ts.add("cba");
                ts.add("caa");
                ts.add("caa");
                ts.add("z");
                ts.add("hahaha");

                Iterator it=ts.iterator();
                while(it.hasNext())
                {
                System.out.println(it.next());
                }
               
        }
}
class MyComparator implements Comparator
{
        public  int compare(Object o1,Object o2)
        {
                String s1=(String)o1;
                String s2=(String)o2;
        //        if(s1.length()>s2.length())
        //                return 1;
        //        if(s1.length()==s2.length())
        //                return 0;
        //        return -1;
        //        int num=s1.
        int num=new Integer(s1.length()).compareTo(new Integer(s2.length()));
        if(num==0)
                return s1.compareTo(s2);
return num;
        }
}


谁能简单说一下TreeSet ts=new TreeSet(new MyComparator());
这句话的含义

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

3 个回复

倒序浏览
创建一个带比较器的TreeSet而已,再认真去看看Set集合吧。视频中详细讲解过
回复 使用道具 举报
其实可以匿名内部类的,用自己的比较器排序
回复 使用道具 举报
在说问题之前,首先有一点要明确。

TreeSet集合类是按照二叉树来进行排序的,在add对象(如String类对象,Integer类对象,亦或者自建的Person类对象)的时候,它的底层会自动调用对象的CompareTo()方法。如果你add的对象中有此方法,那就会底层调用。如果是自建类,需要实现Coparable接口,并复写其中的copareTo()方法(查阅API就会发现,String,Integer等类都继承了这个接口,并复写了compareTo()方法)。

如果你不想用对象本身的比较性,如String类的对象是按照字母在ASCII码中的大小来排序的。那么可以自己设定比较方法。如果更改对象类的本身,那就不太好了。这时候就用到了比较器Comparator。只要创造一个类,并实现该接口,复写其中的compare()方法,那么就生成了一个新的比较器。在new 集合类TreeSet对象时,只需要将新的比较器(MyComparator)传入构造方法中即可。

Comparator接口优先于Comparable,前提是你在构造方法中传入了新的比较器。

下面解释你的问题。

TreeSet ts=new TreeSet(new MyComparator());
这句话的意思是,new一个TreeSet集合类,并传入一个新的比较器(MyComparator),这样一来,就可以按照自己的意愿来比较集合中存储的对象。

我说的清楚么?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

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