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]]

36、TreeSet详解的更多相关文章

  1. TreeSet()详解

    TreeSet()详解   1.TreeSet原理:   /* * TreeSet存储对象的时候, 可以排序, 但是需要指定排序的算法 *  * Integer能排序(有默认顺序), String能排 ...

  2. 【Java入门提高篇】Day31 Java容器类详解(十三)TreeSet详解

    上一篇很水的介绍完了TreeMap,这一篇来看看更水的TreeSet. 本文将从以下几个角度进行展开: 1.TreeSet简介和使用栗子 2.TreeSet源码分析 本篇大约需食用10分钟,各位看官请 ...

  3. Jmeter系列(36)- 详解 Loop Controller 循环控制器

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 前言 这应该是最简单的控制器了,我们快 ...

  4. 重新想象 Windows 8 Store Apps (36) - 通知: Tile 详解

    [源码下载] 重新想象 Windows 8 Store Apps (36) - 通知: Tile 详解 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 通知 Tile ...

  5. [Spark内核] 第36课:TaskScheduler内幕天机解密:Spark shell案例运行日志详解、TaskScheduler和SchedulerBackend、FIFO与FAIR、Task运行时本地性算法详解等

    本課主題 通过 Spark-shell 窥探程序运行时的状况 TaskScheduler 与 SchedulerBackend 之间的关系 FIFO 与 FAIR 两种调度模式彻底解密 Task 数据 ...

  6. Java集合详解7:一文搞清楚HashSet,TreeSet与LinkedHashSet的异同

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

  7. 集合框架的详解,List(ArrayList,LinkedList,Vector),Set(HashSet,TreeSet)-(14)

    集合详解: /* Collection |--List:元素是有序的,元素可以重复.因为该集合体系有索引. |--ArrayList:底层的数据结构使用的是数组结构.特点:查询速度很快.但是增删稍慢. ...

  8. Java: 集合类详解

    0.参考文献 http://blog.csdn.net/liulin_good/article/details/6213815 1.java集合类图 1.1 1.2 上述类图中,实线边框的是实现类,比 ...

  9. 【转载】Java 集合详解

    转载:https://www.cnblogs.com/ysocean/p/6555373.html 一.集合的由来 通常,我们的程序需要根据程序运行时才知道创建多少个对象.但若非程序运行,程序开发阶段 ...

随机推荐

  1. bzoj 2938

    收获: 1.AC自动机可以在建立fail时将一些不存在的儿子指针指向对应的位置. 2.判断环时不要想当然地写个这样的版本: bool dfs( int u ) { if( vis[u] ) retur ...

  2. 【转】_CrtSetBreakAlloc 内存泄漏

    声明:本内容转载自 https://my.oschina.net/gp8wLHNUeKd2C/blog/110707 在使用VS开发过程中,(今日)遇到内存泄漏的情况.具体表现为: 在输出窗口中,显示 ...

  3. Codeforces Beta Round #4 (Div. 2 Only) A. Watermelon 水题

    A. Watermelon 题目连接: http://www.codeforces.com/contest/4/problem/A Description One hot summer day Pet ...

  4. mybatis源码分析(2)-----SqlSession创建

    1. 在创建好sqlSessionFactory之后,接着就要配置sqlSession的创建. <bean id="simpleTempalte" class="o ...

  5. mysql 绿色版安装

    1. 下载MySql5.6.10GA解压缩版,这就不多说也不上图了,下不到或者下好之后不知道如何解压的接下去的文章也没什么好多看的. 2. 解压好之后进入根目录是这样个情况(本人使用的是MySql5. ...

  6. MySql清空表的方法介绍 : truncate table 表名

    清空某个mysql表中所有内容 delete from 表名; truncate table 表名; 不带where参数的delete语句可以删除mysql表中所有内容,使用truncate tabl ...

  7. mysql世界国家省市地区的信息中英文

    项目的主要业务是在国外, 所以以前的省市数据不仅不全, 而且没有英文翻译,  幸好在网上找到一个符合要求的数据 感谢: https://github.com/moolighty/geo

  8. 2009年末最强梅麻呂3D动画游戏大作 汉化补丁

    [游戏名称]:Yin荡游戯Ω(前编)-闇の眷族vs女ドラゴン- (名字请自己补) [游戏厂商]:梅麻吕3D [发售日期]:2010年04月16日 游戏评价: 梅麻呂的3D作品能够说是如今3D动画中最好 ...

  9. 《CUDA并行程序设计:GPU编程指南》

    <CUDA并行程序设计:GPU编程指南> 基本信息 原书名:CUDA Programming:A Developer’s Guide to Parallel Computing with ...

  10. 用mappedbytebuffer实现一个持久化队列【转】

    自从前段时间的一个事故让队列里缓存的大量关键数据丢失后,一直琢磨着弄一个能持久化到本地文件的队列,这样即使系统再次发生意外,我也不至于再苦逼的修数据了.选定使用mappedbytebuffer来实现, ...