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不支持快速随机遍历,只能通过迭代器进行遍历!

下面的程序演示了几个支持此集合的方法︰

 import java.util.*;
public class TreeSetDemo {
public static void main(String args[]) {
// Create a tree set
TreeSet ts = new TreeSet();
// Add elements to the tree set
ts.add("C");
ts.add("A");
ts.add("B");
ts.add("E");
ts.add("F");
ts.add("D");
System.out.println(ts);
}
}

结果为:

 [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.

TreeSet简单介绍与使用方法的更多相关文章

  1. (转)TreeSet简单介绍与使用方法

    TreeSet简介 TreeSet是JAVA中集合的一种,TreeSet 是一个有序的集合,它的作用是提供有序的Set集合.它继承于AbstractSet抽象类,实现了NavigableSet< ...

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

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

  3. lombok的简单介绍和使用方法

    这是上周在群里发现有人推荐lombok,他说是神器,当时就引起了我的好奇,然后下班回来我就看了看官网介绍(菜鸟英语水平),这就是难点了,然后就是大概了解了一下,就在网上查了查相关资料,周末的时候自己试 ...

  4. CSRF简单介绍及利用方法

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

  5. 关于ios的autoLayout的一些简单介绍以及使用方法

    一.autoLayout的用途: 主要用于屏幕适配,尤其是出现了iphone6,plus之后. 二.怎么简单的用autoLayout呢? 点击左一,可以看到: 点击左二: 基本上要想autolayou ...

  6. java中的泛型,简单介绍。 修饰方法的用法

    一.<R>  ( R  r ) 默认object  可以存所有类型.   R 这个是随便定义的大写字母,前后要保持一致性! package com.aaa.test; /* * 演示 泛型 ...

  7. CSS3中transform,transition和animation的简单介绍和使用方法演示样例

    transform是一个属性,本质跟width,height是一样的,加上transform也就是为类添加一个变换属性. transition是一个属性.它是用来控制过渡效果的,由于用transfor ...

  8. angular1.x的简单介绍(二)

    首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...

  9. 决策树简单介绍(二) Accord.Net中决策树的实现和使用

    决策树介绍 决策树是一类机器学习算法,可以实现对数据集的分类.预测等.具体请阅读我另一篇博客(http://www.cnblogs.com/twocold/p/5424517.html). Accor ...

随机推荐

  1. RHEL6使用系统自带多路径软件配置多路径

    1.多路径的主要功能 多路径一般配合存储设备实现如下功能: 故障的切换和恢复  IO流量的负载均衡  磁盘的虚拟化     2.查看系统自带的多路径软件是否安装 [root@cluster01 ~]# ...

  2. Java语言开发的,直接解压即可使用软件

    Tomcat ZooKeeper ActiveMQ Mycat

  3. Springboot + Mybatis + Ehcache

    最近在做一个项目,为处理并发性较差的问题,使用了Mybatis二级缓存 但在多表联合查询的情况下,Mybatis二级缓存是存在着数据脏读的问题的 两天就是在想办法解决这个数据脏读的问题 考虑到简易性. ...

  4. 《Python基础教程》第二章:列表和元组(1)

    列表可以修改,元组则不能 字符串就是一个由字符组成的序列 使用分片操作来访问一定范围内的元素,分片操作的实现需要提供两个索引作为边界,第一个索引的元素是包含在分片内的,而第二个不包含在分片内. 如果分 ...

  5. Android Studio Terminal 常用命令

    一.Manifest merger failed with multiple errors, see logs 在android开发的时候,有时候会遇到这样的问题 Error:Execution fa ...

  6. Web界面开发必看!Kendo UI for jQuery编辑功能指南第一弹

    Kendo UI for jQuery最新试用版下载 Kendo UI目前最新提供Kendo UI for jQuery.Kendo UI for Angular.Kendo UI Support f ...

  7. SiteMesh的简单使用

    简介: SiteMesh是一个网页布局和修饰的框架,利用它可以将网页的内容和页面结构分离,以达到页面结构共享的目的. 它能通过创建一个包装对象,也就是装饰来包裹的对象.尽管它是由Java语言来实现的, ...

  8. ThreadPoolTaskExecutor使用详解(转)

    当并发或者异步操作,都会用到ThreadPoolTaskExecutor.现在对线程池稍作理解. /*** *@Auth dzb *@Date 22:29 2018/8/29 *@Descriptio ...

  9. 题解 合并 union

    合并 union Description 给出一个 1 ∼ N 的序列 A ( A 1 , A 2 , ..., A N ) .你每次可以将两个相邻的元素合并,合并后的元素权值即为 这两个元素的权值之 ...

  10. Python 特点

    优点 简单 -- Python 是一种代表简单主义思想的语言.阅读一个良好的 Python 程序就感觉像是在读英语一样,尽管这个英语的要求非常严格!Python 的这种伪代码本质是它最大的优点之一.它 ...