TreeSet是SortedSet接口的实现类,TreeSet可以保证元素处于排序状态。与HashSet相比,TreeSet还提供了如下几个而外的方法:

  1)、Comparator comparator():如果TreeSet采用了定制排序,则方法返回定制排序所使用的Comparator;如果TreeSet采用的是自然排序,则返回null

  2)、Object first():返回集合的第一个元素

  3)、Object last():返回集合的最后一个元素

  4)、Object lower(Object e):返回集合中位于指定元素之前的元素

  5)、Object higher(Object e):返回集合中位于指定元素之后的元素

  6)、SortedSet subSet(Object fromElement,Object toElement):返回此Set的子集合,返回从fromElement(包含)到toElement(不包含)

  7)、SortedSet headSet(Object toElement):返回此Set的子集,由小于toElement的元素组成

  8)、SortedSet tailSet(Object fromElement):返回此Set的子集,由大于或等于fromElement的元素组成

  由于TreeSet元素有排序状态,TreeSet会调用集合元素的compareTo方法来比较元素之间的大小,所以这些元素对于的类必须实现Comparable接口。同时在元素调用compareTo方法时,如果两个元素的类型不一致,会出现ClassCastException异常。

  总结起来,TreeSet使用要求有:

  1、TreeSet中存储的对象必须是同类型的对象

  2、TreeSet中存储的类型必须实现了Comparable接口

  

 public class Test {

     public static void main(String[] args) {
Student s1=new Student("robin", 20080101);
Student s2=new Student("ken", 20080114);
Student s3=new Student("lucy", 20080102);
Student s4=new Student("jock", 20080103);
TreeSet<Student> set=new TreeSet<Student>(); set.add(s1);
set.add(s2);
set.add(s3);
set.add(s4);
System.out.println(set); }
} class Student implements Comparable<Student>{
private String name;
private int code;
public int getCode(){
return code;
}
public Student(String name,int code){
this.name=name;
this.code=code;
}
@Override
public int compareTo(Student o) {
return this.code-o.code;
}
@Override
public String toString() {
return "Student [name=" + name + ", code=" + code + "]";
} }

  结果:[Student [name=robin, code=20080101], Student [name=lucy, code=20080102], Student [name=jock, code=20080103], Student [name=ken, code=20080114]]

  如果改变TreeSet中对象的实例变量,这将导致它与其它对象的大小顺序发生变化,但TreeSet不会再次调整他们的顺序,然后会出现其它问题。所以在使用TreeSet和HashSet时,为了程序的更加健壮,推荐不要修改放入HashSet和TreeSet中的元素的关键实例变量。

定制排序

     public static void main(String[] args) {
Student s1=new Student("robin", 20080101);
Student s2=new Student("ken", 20080114);
Student s3=new Student("lucy", 20080102);
Student s4=new Student("jock", 20080103);
TreeSet<Student> set=new TreeSet<Student>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
// TODO Auto-generated method stub
return o2.getCode()-o1.getCode();
}
}); set.add(s1);
set.add(s2);
set.add(s3);
set.add(s4);
System.out.println(set); }

输出结果:[Student [name=ken, code=20080114], Student [name=jock, code=20080103], Student [name=lucy, code=20080102], Student [name=robin, code=20080101]]

最新文章

  1. remi
  2. HDU 1789 Doing Homework again(贪心)
  3. Android自定义之仿360Root大师水纹效果
  4. 转!!java线程状态
  5. iOS开发笔记系列-基础7(C语言特性)
  6. 实习之vim基本学习
  7. 2016 Multi-University Training Contest 4 总结
  8. U3d keyCode值对应的按键
  9. 混合app
  10. 原生js+canvas实现滑动拼图验证码
  11. 初探linux子系统集之timer子系统(三)
  12. mybatis逆向工程generatorConfiguration详细配置
  13. UI移动设备屏幕知识
  14. WMI 连接远程计算机并进行局域网进程扫描
  15. Hibernate 注解和配置文件两种方法的对比(有实例)
  16. CF 1064B Equations of Mathematical Magic(思维规律)
  17. ios软键盘将页面抵到上面后,关闭软键盘页面不回弹
  18. apache 各种配置
  19. 机器学习学习笔记之一:K最近邻算法(KNN)
  20. 转:devise使用

热门文章

  1. 74.Interesting Sequence(有趣的数列)(拓扑排序)
  2. Educational Codeforces Round 12 A. Buses Between Cities 水题
  3. April Fools Day Contest 2016 D. Rosetta Problem
  4. 函数中的 arguments 对象
  5. 无线遥控器方案 Si4010/Si4012
  6. 多线程间通信之AutoResetEvent和ManualResetEvent的原理分析和开发示例
  7. 关于NAND flash的MTD分区与uboot中分区的理解
  8. 淘宝API开发第一步
  9. &lt;三&gt;年编程经验、何去何从?
  10. [翻译] TSActivityIndicatorView 自定义指示器