一起学习集合框架之 TreeSet
创始人
2024-01-30 20:52:57
0

什么是 TreeSet

TreeSet 是一个具有唯一元素的二叉树的集合,又被翻译为 树集。Java 中的 TreeSet 类是 Java 集合框架的一部分,从 Java 6 开始,它实现了 NavigableSet 接口(这个接口增加了几个查找元素以及反向遍历的便利方法),从而扩展了 SortedSet 集合。

TreeSet 类与散列类十分相似,不过,它比普通的集合有所改进,树集是一个有序集合(sorted collection),该数据结构的元素按自然顺序排序。

  • SortedSet 接口提供了保持元素排序的功能。
  • Navigableset 接口提供了可以通过 SortedSet 检索的功能。例如,找到该元素大于或小于给定元素,找到排序集中的第一个和最后一个元素。

接口 API

我们来看看 TreeSet 的接口:

TreeSet()

public TreeSet() {this(new TreeMap<>());
}

TreeSet(Comparator comparator)

public TreeSet(Comparator comparator) {this(new TreeMap<>(comparator));
}

TreeSet(Collection c)

    public TreeSet(Collection c) {this();addAll(c);}

TreeSet(SortedSet s)

    public TreeSet(SortedSet s) {this(s.comparator());addAll(s);}

其他方法

其他方法,可以读者自行研究,如下:

因为实现了 SortedSet 接口,因此具有:

  • Comparator comparator() 、
  • E first()
  • E last()

又实现了 NavigableSet 接口:

  • E higher(E value) 和 E lower(E value) :返回大于 value 的最小元素和小于 value 的最大元素,如果没有则返回 null
  • E celling(E value)和 E floor(E value) :返回大于等于 value 的最小元素或小于等于 value 的最大元素,如果没有 则返回 null
  • E pollFirst() 和 E pullLast():删除并返回这个集合中的最大元素或最小元素,这个集合为空时返回 null
  • Iterator descendingIterator():返回一个按照递减顺序遍历集合中元素的迭代器

简单的 TreeSet 例子

我们可以以任意顺序将元素插入到集合中,在对集合进行遍历时,会返回排序好的值。例如:

import java.util.TreeSet;public class TreeSetExample {public static void main(String[] args) {// 定义一个 String 类型的树集TreeSet treeset = new TreeSet();// 添加元素treeset.add("Learning TreeSet");treeset.add("Hello, world!");treeset.add("ABC");treeset.add("Yuzhou1su");treeset.add("宇宙之一粟");for (String ts : treeset) {System.out.println(ts);}}}

运行结果:

ABC
Hello, world!
Learning TreeSet
Yuzhou1su

正如 TreeSet 类名一般,排序是通过树数据结构完成的(实现的是红黑树),如果要使用树集,必须能够比较元素,即这些元素必须实现 Comparable 接口,或者构造集必须提供一个 Comparator。

自定义比较器的 TreeSet

树集中默认是升序,让我们来自定义一个降序的比较器:

package com.yuzhou1su.TreeSetExample;import java.util.TreeSet;
import java.util.Comparator;
import java.util.SortedSet;public class TreeSetDescendingOrderExample {public static void main(String[] args) {SortedSet nums = new TreeSet<>(Comparator.reverseOrder());nums.add(1);nums.add(99);nums.add(20);nums.add(2022);nums.add(2035);System.out.println("Descending order:" + nums);}}

运算结果:

Descending order:[2035, 2022, 99, 20, 1]

下面来看一下 TreeSet 如何创建、往其中插入元素、如何搜索和字符串化操作。如何集合为空,则 TreeSet 只允许一个空值。TreeSet 的添加、删除和查找包含的函数的算法复杂度为 log(n)

插入节点

func (treeset *TreeSet) InsertTreeNode(treeNodes ...TreeNode) {
}

相关内容

热门资讯

湖北潜江警方:一男子醉酒持玩具...   央视网消息:据潜江公安微信公众号消息,湖北潜江市公安局12月27日发布警情通报,12月26日21...
“涨到可怕了!”有人一觉醒来赚... 新闻荐读 白银暴涨10%,接近20元/克;现货黄金站上4549美元/盎司,刷新历史高位;铂金大涨,铂...
视频丨日本民众举行集会 反对重...   26日晚,部分日本民众在日本首相官邸前举行抗议集会。他们表示,在日本核设施老化、管理混乱、监管不...
加沙地带卫生部门:本轮停火期间...   △加沙地带(资料图)  当地时间12月27日,根据加沙地带卫生部门公布最新统计报告显示,在过去4...
时光相册|从信仰之路到幸福路的...   12月26日10时许  随着“复兴号”智能动车组列车  驶出延安站  西安至延安高铁开通运营  ...
全球洞察│马来西亚学者:日本政...   近期,日本首相高市早苗及其领导的政府在军事安全问题上恶劣言论不断。  11月,日本媒体披露,高市...
全国人民代表大会常务委员会批准... 全国人民代表大会常务委员会批准任命的名单(2025年12月27日第十四届全国人民代表大会常务委员会第...
2025“三农”成绩单|精耕良...   一年来,各地各部门辛勤耕耘、真抓实干,不断夯实“三农”发展基础。2025年,我国粮食实现高位增产...
绘说现代化丨冰雪龙江 热力全开   2024-2025冰雪季,黑龙江累计接待国内外游客1.35亿人次;黑龙江拥有超 4000 家冰雪...
体育课“搬进”滑雪场 新疆学生...   近日,记者跟随“新疆的冬天亚克西”主题采访团来到新疆昌吉回族自治州阜康市,聚焦冰雪经济高质量发展...