package frank;
import java.lang.*;
import java.util.TreeSet;
import java.util.Comparator;
/**
* TreeSet 数集合,他是SortedSet接口的实现类,自动排序。
* */
public class App
{
public static void main(String[] args)throws Exception
{
TreeSet ts = new TreeSet();
ts.add(5);
ts.add(2);
ts.add(10);
ts.add(-9);
ts.add(5);//如果存在将不添加进去。
System.out.println(ts);//自动从大到小自动排序。
System.out.println(ts.first());//输出集合中的第一个元素
System.out.println(ts.last());//输出集合中的最后一个元素
System.out.println(ts.headSet(4));//输出集合中小于4的集合,但是不包含4
System.out.println(ts.tailSet(5));//输出大于5的子集,如果Set中包含5,那么也输出5
System.out.println(ts.subSet(-9,5));//输出大于等于-9,小于5的子集
/**
*输出结果:
[-9, 2, 5, 10]
-9
10
[-9, 2]
[5, 10]
[-9, 2]
*
*TreeSet采用自然排序和定制排序来进行排序,默认是自然排序
* */
TreeSet ts2 = new TreeSet();
//ts2.add(new Err());//试图把一个没有实现Comparable接口的对象添加到TreeSet集合里面去就会报错。
//ts2.add(new String("1"));
//ts2.add(new TreeSet());//TreeSet里面添加的必须是同一类的对象,不然会发生类转换异常。
ts2.add(new Z(6));//自定义类必须实现接口Comparable
System.out.println(ts2.add(new Z(6)));//添加同样的元素
((Z)(ts2.first())).age = 9;//修改第一个对象age
System.out.println(((Z)ts2.first()).age+"---"+ts2.size());//访问第一个元素是否修改。
/******定制排序******/
TreeSet ts3 = new TreeSet(new Comparator()
{
public int compare(Object obj1,Object obj2)
{
M m1 = (M)obj1;
M m2 = (M)obj2;
return m1.age > m2.age ? -1 : m1.age < m2.age ? 1 :0;
}
});
ts3.add(new M(5));
ts3.add(new M(-3));
ts3.add(new M(9));
System.out.println(ts3);
}
}
class Z implements Comparable
{
int age;
public Z(int age)
{
this.age = age;
}
public boolean equals(Object obj)
{
return true;
}
public int compareTo(Object obj)
{
return 1;//始终不相等,所以就算跟自己相同的对象也能添加进来。
}
}
class Err
{
}
class M
{
int age;
public M(int age)
{
this.age = age;
}
public String toString()
{
return "M[age:"+this.age+"]";
}
}