黑马程序员技术交流社区

标题: 把另一个对象传入TreeSet对象中的用法 [打印本页]

作者: 906822773    时间: 2014-7-3 13:31
标题: 把另一个对象传入TreeSet对象中的用法
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());
这句话的含义

作者: 菜小徐    时间: 2014-7-3 14:43
创建一个带比较器的TreeSet而已,再认真去看看Set集合吧。视频中详细讲解过
作者: luheqi    时间: 2014-7-3 15:11
其实可以匿名内部类的,用自己的比较器排序
作者: wisely    时间: 2014-7-3 18:31
在说问题之前,首先有一点要明确。

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),这样一来,就可以按照自己的意愿来比较集合中存储的对象。

我说的清楚么?




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