java中TreeSet集合
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+"]"; } }