TreeSet简单介绍与使用方法
TreeSet简介
TreeSet是JAVA中集合的一种,TreeSet 是一个有序的集合,它的作用是提供有序的Set集合。它继承于AbstractSet抽象类,实现了NavigableSet<E>,Cloneable,java.io.Serializable接口。
一种基于TreeMap的NavigableSet实现。
因为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)
返回此集的部分视图的元素范围从
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. |
TreeSet简单介绍与使用方法的更多相关文章
- (转)TreeSet简单介绍与使用方法
TreeSet简介 TreeSet是JAVA中集合的一种,TreeSet 是一个有序的集合,它的作用是提供有序的Set集合.它继承于AbstractSet抽象类,实现了NavigableSet< ...
- CSRF简单介绍及利用方法-跨站请求伪造
0x00 简要介绍 CSRF(Cross-site request forgery)跨站请求伪造,由于目标站无token/referer限制,导致攻击者可以用户的身份完成操作达到各种目的.根据HTTP ...
- lombok的简单介绍和使用方法
这是上周在群里发现有人推荐lombok,他说是神器,当时就引起了我的好奇,然后下班回来我就看了看官网介绍(菜鸟英语水平),这就是难点了,然后就是大概了解了一下,就在网上查了查相关资料,周末的时候自己试 ...
- CSRF简单介绍及利用方法
x00 简要介绍 CSRF(Cross-site request forgery)跨站请求伪造,由于目标站无token/referer限制,导致攻击者可以用户的身份完成操作达到各种目的.根据HTTP请 ...
- 关于ios的autoLayout的一些简单介绍以及使用方法
一.autoLayout的用途: 主要用于屏幕适配,尤其是出现了iphone6,plus之后. 二.怎么简单的用autoLayout呢? 点击左一,可以看到: 点击左二: 基本上要想autolayou ...
- java中的泛型,简单介绍。 修饰方法的用法
一.<R> ( R r ) 默认object 可以存所有类型. R 这个是随便定义的大写字母,前后要保持一致性! package com.aaa.test; /* * 演示 泛型 ...
- CSS3中transform,transition和animation的简单介绍和使用方法演示样例
transform是一个属性,本质跟width,height是一样的,加上transform也就是为类添加一个变换属性. transition是一个属性.它是用来控制过渡效果的,由于用transfor ...
- angular1.x的简单介绍(二)
首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...
- 决策树简单介绍(二) Accord.Net中决策树的实现和使用
决策树介绍 决策树是一类机器学习算法,可以实现对数据集的分类.预测等.具体请阅读我另一篇博客(http://www.cnblogs.com/twocold/p/5424517.html). Accor ...
随机推荐
- Centos 安装 kubectl kubelet kubeadm
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://m ...
- mysql-mmm实现高可用和部署时须要考虑的问题
mysql-mmm简介 Multi-Master Replication Manager for MySQL,简称mmm,官方的介绍可以参考mmm官网.好处自然不用说,读写分离,官方称读能做到负载均衡 ...
- Python Module模块
模块 https://docs.python.org/zh-cn/3/tutorial/modules.html 模块的概念被高级语言广泛使用. Python的定义 一个包括Python定义和语句的文 ...
- 从二叉查找树到平衡树:avl, 2-3树,左倾红黑树(含实现代码),传统红黑树
参考:自平衡二叉查找树 ,红黑树, 算法:理解红黑树 (英文pdf:红黑树) 目录 自平衡二叉树介绍 avl树 2-3树 LLRBT(Left-leaning red-black tree左倾红黑树 ...
- 【踩坑记录】 使用form标签的 reset() 方法报错原因及处理方法
如果form标签内包含了 id 为 reset 的元素,在调用form的 reset() 方法时,会报xxx.reset is not a function,原因是在调用form的 reset() 方 ...
- ios11返回按钮问题
在苹果系统升级到iOS11之后,页面的返回按钮的点击区域是根据设置的按钮的frame来确定的,在设置按钮太小的时候,点击就会出现点击多次才能点击到一次的现象,处理的方法就是设置按钮的frame变大代码 ...
- Zabbix Agent 安装指南和 Zabbix Server 设置自动发现
Zabbix Agent分为两种模式,被动模式(Passive)和主动模式( 我们实验在node1.yulongjun.com 和node2.yulongjun.com上分别配置Zabbix Agen ...
- [人物存档]【AI少女】【捏脸数据】1222今日份的推荐
AISChaF_20191030183624290.png
- ACM之一个简单的数学问题
一个简单的数学题 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 zyc最近迷上了数学,一天,dj想出了一道数学题来难住他.算出1/n,但zyc一时答不上来希望大家能编程 ...
- delphi通过url下载文件
procedure TfrmEngineerImport.btnDownloadClick(Sender: TObject);var vsql, SourceFile, DestFile, filen ...