TreeSet简介

  TreeSet是JAVA中集合的一种,TreeSet 是一个有序的集合,它的作用是提供有序的Set集合。它继承于AbstractSet抽象类,实现了NavigableSet<E>,Cloneable,java.io.Serializable接口。

  一种基于TreeMapNavigableSet实现。

    因为TreeSet继承了AbstractSet抽象类,所以它是一个set集合,可以被实例化,且具有set的属性和方法。

  TreeSet是基于TreeMap实现的。TreeSet中的元素支持2种排序方式:自然排序 或者 根据创建TreeSet 时提供的 Comparator 进行排序。这取决于使用的构造方法。

  TreeSet的性能比HashSet差但是我们在需要排序的时候可以用TreeSet因为他是自然排序也就是升序下面是TreeSet实现代码这个类也似只能通过迭代器迭代元素

  ps:TreeSet是有序的Set集合,因此支持add、remove、get等方法。

  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的实例"。

TreeSet遍历方式

  Iterator顺序遍历

for(Iterator iter = set.iterator(); iter.hasNext(); ) { iter.next();
}   

  Iterator顺序遍历

// 假设set是TreeSet对象
for(Iterator iter = set.descendingIterator(); iter.hasNext(); ) { iter.next();
}

  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 import java.util.*;
 2 public class TreeSetDemo {
 3    public static void main(String args[]) {
 4       // Create a tree set
 5       TreeSet ts = new TreeSet();
 6       // Add elements to the tree set
 7       ts.add("C");
 8       ts.add("A");
 9       ts.add("B");
10       ts.add("E");
11       ts.add("F");
12       ts.add("D");
13       System.out.println(ts);
14    }
15 }

结果为:

1 [A, B, C, D, E, F]

  下面是支持 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)

返回此集的部分视图的元素范围从fromElementtoElement.
SortedSet<E> subSet(E fromElement, E toElement)

返回视图的部分的这一套的元素范围从fromElement,具有包容性,到toElement,独家。
SortedSet<E> tailSet(E fromElement)

返回其元素是大于或等于fromElement这套的部分视图.
NavigableSet<E> tailSet(E fromElement, boolean inclusive)

返回其元素是大于 (或等于,如果inclusive是真的) 这套的部分视图fromElement.

转载于:https://www.cnblogs.com/Tony-cheen/p/5681831.html

TreeSet简单介绍与使用方法相关推荐

  1. JSTL 及 tablibs 的简单介绍和配置方法

    JSTL 及 tablibs 的简单介绍和配置方法 jstl 简介 jstl 的全称就是jsp standard tag libraries, 就是jsp里的标准标签库. 引用jstl技术能在jsp种 ...

  2. CSRF简单介绍及利用方法-跨站请求伪造

    0x00 简要介绍 CSRF(Cross-site request forgery)跨站请求伪造,由于目标站无token/referer限制,导致攻击者可以用户的身份完成操作达到各种目的.根据HTTP ...

  3. Derby与mysql的关系_Derby数据库简单介绍和使用方法 | 学步园

    一. Derby 数据库介绍 Apache Derby 是100% Java 编写的内存数据库,属于 Apache 的一个开源项目.并且是一个容易管理的关系数据库管理系统,可以和一些商业产品的特性进行 ...

  4. Derby数据库简单介绍和使用方法

    引言 从软件角度来说,数据库分类为两种: 第一种:数据库服务器(Database Server) 第二种:嵌入式数据库(Embedded Database) 像 Oracle.PostgreSQL.M ...

  5. Web前端工作笔记004---js--webSocket简单介绍和使用方法

    JAVA技术交流QQ群:170933152 Websocket 1.websocket是什么? WebSocket是为解决客户端与服务端实时通信而产生的技术.其本质是先通过HTTP/HTTPS协议进行 ...

  6. 在pandas里pd.Timedelta的简单介绍及使用方法

    在pandas里pd.Timedelta的使用方法 1.Timedelta基本概念 Timedelta参数 通过字符串传递参数 通过整数传递参数 通过数据偏移 2.Timedelta简单利用 计算生日 ...

  7. java数组简单介绍以及其方法

    小谈一下java数组 数组是存放数据的容器,有两个特点:元素类型唯一,长度固定. 一维数组声明:类型[] 数组名;类型 数组名[];推荐用前一种. 多维数组声明同样是以上要求. 在数组创建时,要注意一 ...

  8. 华为VRP系统管理(简单介绍及使用方法)

    vrp--华为数通产品的通用操作系统平台 vrp的发展 vrp1--vrp2--vrp3--vrp5--vrp8 文件系统 系统文件.配置文件.补丁文件.PAF文件 文件后缀       .cc    ...

  9. Flask的简单介绍及使用方法简介

    一.什么是flask? Falsk是由python开发的轻量的web框架,小巧,灵活,一个脚本就可以启动一个web项目, 开发的难度比较大,flask好多的模块是按照django的思路开发的.和fla ...

  10. Java虚拟机内存模型简单介绍

    一.虚拟机 同样的java代码在不同平台生成的机器码肯定是不一样的,因为不同的操作系统底层的硬件指令集是不同的. 不知道同学们还记不记得,在下载jdk的时候,我们在oracle官网,基于不同的操作系统 ...

最新文章

  1. ZooKeeper简单使用
  2. 金融行业信息系统信息安全等级保护实施指引_中国人民银行发布金融行业网络安全等级保护实施指引...
  3. 基于认证的代理平台搭建配置squid-20130730
  4. 创建可按比例调整的布局的 Windows 窗体
  5. 取消对 null 指针“l”的引用。_C语言编程笔记丨C 语言指针 5 分钟教程
  6. 2016 ICPC 北京网络赛 A 恶心模拟 F 循环矩阵,FFT(待补) I 模拟
  7. php判断桌面宽度,js获取页面宽度高度及屏幕分辨率
  8. 日期条控件 DateFieldControl
  9. Mybatis_day2_Mybatis的参数深入
  10. Rust : Json Web Token
  11. oc基础-oc中之集合NSSet,NSMutableSet
  12. html组合标题,如何组合标题关键词(影响标题的5个因素)
  13. x64伪装进程路径 过PCHunter xxx ARK
  14. python里print字符串+字符串_python 字符串 和 print
  15. 中国第一代技术网红,在阿里被当神一样崇拜:我不跟人拼智商,我就跟他们拼狠!...
  16. 微俱聚平台更新日志jquery时间轴特效
  17. Android Killer中apktool插件更新
  18. 启动“山城模式”,重庆能否经得起智能网联汽车的“考验”?
  19. 从PDF直接复制粘贴过来可以吗?其他软件的数据怎么导入Excel?
  20. 日本最大的120家医用物资供应商列表

热门文章

  1. 嵌入式系统——专业英语
  2. C语言:从键盘中输入字符串,追加填写到指定文件中
  3. 360服务器已停止响应,对于 SQL Server 2017年累积更新 5
  4. Mysql JOIN连接算法
  5. SparkStreaming窗口入门
  6. 电商平台实战经验:电商中的Hadoop生态系统应用
  7. 查看Apache并发请求数及其TCP连接状态 --张宴
  8. 快闪族 - 百度百科
  9. php echo substr('hello',1,-2);-2是什么意思 为什么结果是 el
  10. Delphi高手突破学习笔记三