黑马程序员技术交流社区
标题:
把另一个对象传入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