Set的子接口SortedSet,TreeSet实现了SortedSet。
TreeSet是无序的。
a)
public static void main(String[] args) {
TreeSet set = new TreeSet();
set.add("A");
set.add("B");
set.add("C");
set.add("D");
set.add("E");
set.add("F");
System.out.println(set);
}
}
有程序可知,TreeSet可以自动把有序的序列排序。(对于一些无序的对象以及自定义的对象是无法自动排序的。同时会抛出ClassCastException异常,解决方法看下面的例子)
b)
public class TestTreeSet {
public static void main(String[] args) {
TreeSet set = new TreeSet(new MyCompare());
set.add("A");
set.add("B");
set.add("C");
set.add("D");
set.add("E");
set.add("F");
System.out.println(set);
}
}
class MyCompare implements Comparator{
@Override
publicint compare(Object o1,Object o2) {
Strings1 = (String)o1;
Strings2 = (String)o2;
return s2.compareTo(s1);
//return -s1.compareTo(s2);
}
}
TressSet通过构造方法TreeSet(Comparator<?superE>comparator)指定比较器。
如果想把数据逆序,可直接在compare方法中实现,上述代码既是实现字符的逆序。
C)关于对象的比较
public class TestTreeSet1 {
public static void main(String[] args) {
TreeSet set = new TreeSet(new MyCompare());
People p2 = new People(20);
People p3 = new People(10);
People p4 = new People(30);
People p1 =new People(40);
set.add(p1);
set.add(p2);
set.add(p3);
set.add(p4);
for(Iterator it =set.iterator(); it.hasNext();){
Peoplep = (People)it.next();
System.out.println(p.score);
}
}
}
class People{
int score;
People(int score){
this.score = score;
}
}
class MyCompare implements Comparator{
@Override
publicint compare(Object o1,Object o2) {
People p1 = (People)o1;
People p2 = (People)o2;
return p1.score - p2.score;
}
}
====================个人建议:分析代码时,请参考API,有助于理解=====================