资料来源
  1. TreeSet自然排序与比较器排序精讲 https://blog.csdn.net/xiaofei__/article/details/53138681
  2. TreeSet概念以及遍历方法 https://www.cnblogs.com/Tony-cheen/p/5681831.html
 
1.TreeSet简介
  • TreeSet是JAVA中集合的一种有序集合,它的作用是提供有序的Set集合。它继承于AbstractSet抽象类,实现了NavigableSet<E>,Cloneable,java.io.Serializable接口。
  • 因为TreeSet继承了AbstractSet抽象类,所以它是一个set集合,可以被实例化,且具有set的属性和add、remove、get等方法。
  • TreeSet是基于TreeMap实现的。TreeSet中的元素支持2种排序方式:自然排序和比较器排序。
  • TreeSet的性能比HashSet差,简单比较:HashSet使用散列表进行存储,元素无序,元素允许为null。TreeSet是使用树结构来进行存储,元素按字符串顺序排序存储,元素不允许为null。
 
  TreeSet继承关系
java.lang.Object
↳ java.util.AbstractCollection<E>
↳ java.util.AbstractSet<E>
↳ java.util.TreeSet<E>
public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, java.io.Serializable{}
1、TreeSet继承于AbstractSet,并且实现了NavigableSet接口。
2、TreeSet的本质是一个"有序的,并且没有重复元素"的集合,它是通过TreeMap实现的。TreeSet中含有一个"NavigableMap类型的成员变量"m,而m实际上是"TreeMap的实例"。
 
2.TreeSet自然排序和比较器排序
 
    使用方式
  • a.自然顺序(Comparable)
    • TreeSet类的add()方法中会把存入的对象提升为Comparable类型
    • 调用对象的compareTo()方法和集合中的对象比较
    • 根据compareTo()方法返回的结果进行存储
  • b.比较器顺序(Comparator)
    • 创建TreeSet的时候可以制定 一个Comparator
    • 如果传入了Comparator的子类对象, 那么TreeSet就会按照比较器中的顺序排序
    • add()方法内部会自动调用Comparator接口中compare()方法排序
    • 调用的对象是compare方法的第一个参数,集合中的对象是compare方法的第二个参数
  • c.两种方式的区别
    • TreeSet构造函数什么都不传, 默认按照类中Comparable的顺序(没有就报错ClassCastException)
    • TreeSet如果传入Comparator, 就优先按照Comparator
    TreeSet自然排序与比较器排序精讲 https://blog.csdn.net/xiaofei__/article/details/53138681
 
3.TreeSet迭代方式和方法详解
  • TreeSet的遍历方式
1.TreeSet顺序遍历
for(Iterator iter = set.iterator(); iter.hasNext(); ) {
iter.next();
}
2.Iterator顺序遍历
// 假设set是TreeSet对象
for(Iterator iter = set.descendingIterator(); iter.hasNext(); ) {
  iter.next();
}
3.for-each遍历HashSet
// 假设set是TreeSet对象,并且set中元素是String类型
String[] arr = (String[])set.toArray(new String[0]);
for (String str:arr)
System.out.printf("for each : %s\n", str);
  • TreeSet 的构造函数

序号
构造函数的说明
1
TreeSet ()
此构造函数构造空树集,将在根据其元素的自然顺序按升序排序。
2
TreeSet (集合 c)
此构造函数生成树的集合,它包含的元素的集合 c。
3
TreeSet (比较器 comp)
此构造函数构造一个空树集,将根据给定的比较器进行排序。
4
TreeSet (SortedSet ss)
此构造函数生成包含给定 SortedSet 的元素 TreeSet
  • TreeSet的方法总结

修饰符和类型
方法和描述
boolean
add(E e)
将指定的元素添加到这套,如果它已不存在。
boolean
addAll(Collection<? extends E> c)
在加入这一组指定的集合中添加的所有元素。
E
ceiling(E e)
返回最小的元素在这一组大于或等于给定的元素,则null如果没有这样的元素。
void
clear()
从这一组中移除所有元素。
Object
clone()
返回此TreeSet实例浅表副本。
Comparator<? super E>
comparator()
返回用于排序在这集,或空元素,如果这套使用自然排序其元素的比较。
boolean
contains(Object o)
如果此集合包含指定的元素,则返回true 。
Iterator<E>
descendingIterator()
返回迭代器中这套降序排序的元素。
NavigableSet<E>
descendingSet()
返回逆序视图中包含的元素这一套。
E
first()
返回第一个 (最低) 元素当前在这一套。
E
floor(E e)
返回的最大元素在这一组小于或等于null如果没有这样的元素。
SortedSet<E>
headSet(E toElement)
返回其元素是严格小于toElement这套的部分视图.
NavigableSet<E>
headSet(E toElement, boolean inclusive)
返回一个视图的这部分设置的元素都小于 (或等于,如果inclusive是真的) toElement.
E
higher(E e)
返回最小的元素在这套严格大于给定的元素,则null如果没有这样的元素。
boolean
isEmpty()
如果此集不包含任何元素,则返回true 。
Iterator<E>
iterator()
返回迭代器中这套以升序排序的元素。
E
last()
在这套目前返回的最后一个 (最高) 的元素。
E
lower(E e)
在这一套严格的小于给定的元素,则null返回的最大元素,如果没有这样的元素。
E
pollFirst()
检索和删除第一个 (最低) 元素,或如果此集合为空,则返回null 。
E
pollLast()
检索和删除的最后一个 (最高) 的元素,或如果此集合为空,则返回null 。
boolean
remove(Object o)
从这一组中移除指定的元素,如果它存在。
int
size()
在这套 (其基数) 中返回的元素的数目。
NavigableSet<E>
subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive)
返回此集的部分视图的元素范围从fromElement到toElement.
SortedSet<E>
subSet(E fromElement, E toElement)
返回视图的部分的这一套的元素范围从fromElement,具有包容性,到toElement,独家。
SortedSet<E>
tailSet(E fromElement)
返回其元素是大于或等于fromElement这套的部分视图.
NavigableSet<E>
tailSet(E fromElement, boolean inclusive)
返回其元素是大于 (或等于,如果inclusive是真的) 这套的部分视图fromElement.

Java特殊数据结构-TreeSet的更多相关文章

  1. JAVA常用数据结构及原理分析

    JAVA常用数据结构及原理分析 http://www.2cto.com/kf/201506/412305.html 前不久面试官让我说一下怎么理解java数据结构框架,之前也看过部分源码,balaba ...

  2. (6)Java数据结构-- 转:JAVA常用数据结构及原理分析

    JAVA常用数据结构及原理分析  http://www.2cto.com/kf/201506/412305.html 前不久面试官让我说一下怎么理解java数据结构框架,之前也看过部分源码,balab ...

  3. 【转】Java学习---Java核心数据结构(List,Map,Set)使用技巧与优化

    [原文]https://www.toutiao.com/i6594587397101453827/ Java核心数据结构(List,Map,Set)使用技巧与优化 JDK提供了一组主要的数据结构实现, ...

  4. Java HashSet和TreeSet【笔记】

    Java HashSet和TreeSet[笔记] PS:HashSet.TreeSet 两个类是在 Map 的基础上组装起来的类 HashSet 类注释 1.底层实现基于 HashMap,所以迭代时不 ...

  5. java项目——数据结构实验报告

    java项目——数据结构总结报告 20135315  宋宸宁 实验要求 1.用java语言实现数据结构中的线性表.哈希表.树.图.队列.堆栈.排序查找算法的类. 2.设计集合框架,使用泛型实现各类. ...

  6. Java深入了解TreeSet

    Java中的TreeSet是Set的一个子类,TreeSet集合是用来对象元素进行排序的,同样他也可以保证元素的唯一.那TreeSet为什么能保证元素唯一,它是怎样排序的呢?先看一段代码: publi ...

  7. 【转载】图解Java常用数据结构(一)

    图解Java常用数据结构(一)  作者:大道方圆 原文:https://www.cnblogs.com/xdecode/p/9321848.html 最近在整理数据结构方面的知识, 系统化看了下Jav ...

  8. java实现 数据结构:链表、 栈、 队列、优先级队列、哈希表

    java实现 数据结构:链表. 栈. 队列.优先级队列.哈希表   数据结构javavector工作importlist 最近在准备找工作的事情,就复习了一下java.翻了一下书和网上的教材,发现虽然 ...

  9. Java同步数据结构之ConcurrentSkipListMap/ConcurrentSkipListSet

    引言 上一篇Java同步数据结构之Map概述及ConcurrentSkipListMap原理已经将ConcurrentSkipListMap的原理大致搞清楚了,它是一种有序的能够实现高效插入,删除,更 ...

随机推荐

  1. Winform 多项目共用AssemblyInfo解决方案

    Winform 多项目共用AssemblyInfo解决方案: 操作步骤如下: 第一步:复制任何项目中的AssemblyInfo.cs文件至指定目录 第二步:删除所有项目的AssemblyInfo.cs ...

  2. SQL SERVER 常用函数 学习笔记

    1.字符串截取.字符串转数字 --Server.8.30 select SUBSTRING('SqlServer_2008',4,6) as DB, CONVERT(float,SUBSTRING(' ...

  3. python爬取豆瓣电影信息数据

    题外话+ 大家好啊,最近自己在做一个属于自己的博客网站(准备辞职回家养老了,明年再战)在家里 琐事也很多, 加上自己 一回到家就懒了(主要是家里冷啊! 广东十几度,老家几度,躲在被窝瑟瑟发抖,) 由于 ...

  4. linux-2.6.38poll机制简析(以tiny6410按键中断程序为基础)

    一.应用程序 /* struct pollfd { int fd; //文件描述符 short events; //表示请求检测的事件 short revents; //表示检测之后返回的事件 }; ...

  5. 命令ls按文件大小来排序

    有时候我们想按照文件的大小来排序,一直忘记,为此特记下如下操作 按照文件所占的大小从大开始排列 # ls -lS total 64 -rw-r--r-- 1 root root 55895 Nov 5 ...

  6. (三)wait()、notify()、notifyAll()

    有新理解持续更新 轮询 线程本身是操作系统中独立的个体,但是线程与线程之间不是独立的个体,因为它们彼此之间要相互通信和协作. 想像一个场景,A线程做int型变量i的累加操作,B线程等待i到了10000 ...

  7. Apache、nginx 、lighttpd性能比较

    Apache.nginx .lighttpd性能比较 1. web服务器简介 1. lighttpd Lighttpd是一个德国人领导的开源软件,其根本的目的是提供一个专门针对高性能网站,安全.快速. ...

  8. 国内Maven镜像仓库

    <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http:/ ...

  9. js中Ajax工作原理(转)

    在写这篇文章之前,曾经写过一篇关于AJAX技术的随笔,不过涉及到的方面很窄,对AJAX技术的背景.原理.优缺点等各个方面都很少涉及null.这次写这篇文章的背景是因为公司需要对内部程序员做一个培训.项 ...

  10. CSRF(跨站请求伪造)

    跨站请求伪造(Cross-site request forgery)是一种冒充受信任用户,向服务器发送非预期请求的攻击方式. 攻击的前提是: 用户已经登录过某网站. 攻击者通过一些诱惑性的标题,诱惑用 ...