Java 中的 TreeSet subSet() 方法

Java 中的 TreeSet subSet() 方法

TreeSetJava 集合框架中实现有序集合的一个类。通过使用 TreeSet ,可以实现对集合元素进行自然排序或者使用自定义比较器进行排序。而 subSet() 方法是 TreeSet 中一个非常重要的方法,它可以返回一个给定范围内的子集。

方法介绍

subSet(E fromElement, E toElement) 方法会返回一个由 fromElement (包含)和 toElement (不包含)之间的元素组成的子集。也就是说,返回 TreeSet 中这个范围内的所有元素。

另外,subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) 方法也可以返回指定范围内的子集。其中,fromInclusivetoInclusive 分别表示起始和结束元素是否包含在子集中。

这两个方法都返回一个子集 TreeSet,由于 TreeSet 是有序集合,所以子集也是有序的。

示例代码

import java.util.TreeSet;

public class TreeSetExample{

    public static void main(String[] args) {

        // 创建一个字符串类型的 treeset 并添加元素
        TreeSet<String> treeSet = new TreeSet<String>();
        treeSet.add("apple");
        treeSet.add("banana");
        treeSet.add("peach");
        treeSet.add("orange");

        // 返回指定范围内的子集
        TreeSet<String> subSet1 = new TreeSet<String>(treeSet.subSet("apple", "peach"));
        System.out.println("subSet1: " + subSet1);

        // 返回指定范围内的子集,包含 fromElement
        TreeSet<String> subSet2 = new TreeSet<String>(treeSet.subSet("apple", true, "peach", false));
        System.out.println("subSet2: " + subSet2);

        // 返回指定范围内的子集,包含 fromElement 和 toElement
        TreeSet<String> subSet3 = new TreeSet<String>(treeSet.subSet("apple", true, "peach", true));
        System.out.println("subSet3: " + subSet3);       
    }
}

输出结果:

subSet1: [apple, banana]
subSet2: [apple, banana]
subSet3: [apple, banana, peach]

在上面的示例中,我们首先创建了一个 TreeSet,然后添加了几个字符串元素。接着,我们使用 subSet() 方法生成了三个子集,分别通过不同的参数来指定子集的范围。

注意,当我们使用 subSet() 方法生成子集时,子集的元素是引用了原 TreeSet 中的元素的,所以改变子集中的元素会影响原 TreeSet 中的元素。

异常情况

需要注意的是,subSet() 方法在一些情况下会抛出异常。

假设有一个 TreeSet 包含如下元素:

{"apple", "banana", "peach", "orange"}

如果我们执行以下代码:

treeSet.subSet("peach", "apple").forEach(System.out::println);

则会抛出 IllegalArgumentException 异常,因为 fromElementtoElement 大,所以该范围不存在元素。

同样的,如果我们执行以下代码:

treeSet.subSet("non-existing", "another-non-existing").forEach(System.out::println);

则不会输出任何元素,因为这并不是一个合法的范围(即这两个字符串都不在 TreeSet 中),但也不会抛出异常。

结论

通过 subSet() 方法,我们可以很方便地获取一个 TreeSet 中指定范围内的子集。这个方法非常实用,可以大大提高编程效率。同时,在使用该方法时需要注意范围的正确性,否则可能会抛出异常。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程