一起学习集合框架之 TreeSet(下)

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

其他方法

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

image.png

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

  • Comparator<? super E> comparator()
  • E first()
  • E last()


又实现了 NavigableSet<E> 接口:

  • 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<E> descendingIterator():返回一个按照递减顺序遍历集合中元素的迭代器


简单的 TreeSet 例子


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

import java.util.TreeSet;
public class TreeSetExample {
  public static void main(String[] args) {
    // 定义一个 String 类型的树集
    TreeSet<String> treeset = new TreeSet<String>();
    // 添加元素
    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<Integer> 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) {
}
相关文章
|
9月前
|
存储 算法 Java
集合框架应用一
集合框架应用一
74 2
|
3月前
集合框架
List接口:有序集合,允许重复元素。常用实现类有ArrayList和LinkedList。 List<String> list = new ArrayList<>(); list.add("apple"); list.add("banana"); list.add("apple"); Set接口:无序集合,不允许重复元素。常用实现类有HashSet、TreeSet。 Set<String> set = new HashSet<>(); set.add("apple"); set.add("banana"); Map接口:键值对映射,键不能重
|
9月前
|
存储 Java 容器
初识Java集合框架
初识Java集合框架
|
9月前
|
存储 供应链 Java
集合框架应用二
集合框架应用二
57 1
|
9月前
|
存储 Java 索引
Java集合框架
Java集合框架
40 0
|
存储 Java 容器
Java集合框架的一些小知识
Java集合框架的一些小知识
105 0
|
Java API
一起学习集合框架之 TreeSet(上)
TreeSet 是一个具有唯一元素的二叉树的集合,又被翻译为 树集。Java 中的 TreeSet 类是 Java 集合框架的一部分,从 Java 6 开始,它实现了 NavigableSet 接口(这个接口增加了几个查找元素以及反向遍历的便利方法),从而扩展了 SortedSet 集合。
一起学习集合框架之 TreeSet(上)
|
存储 Java 索引
Java集合框架详解1
Java集合框架详解1
142 0
Java集合框架详解1
|
存储 安全 Java
Java集合框架详解2
Java集合框架详解2
133 0
|
存储 算法 安全
java集合系列(5)LinkedList
这篇文章开始介绍LinkList。他和ArrayList有一些相似,在上一篇文章讲解 ArrayList时,我们知道ArrayList是以数组实现,它的优势是查询性能高,劣势是按顺序增删性能差。如果在不确定元素数量的情况时,不建议使用ArrayList。这种情况下,我们就可以使用LinkedList了。所以这篇文章,旨在从源码的角度进行分析和理解LinkedList。
182 0
java集合系列(5)LinkedList

热门文章

最新文章