Java SortedSet 接口怎么用?如何实现有序集合?

文章导读
上一个 测验 下一个 SortedSet 接口 扩展了 Set,并声明了一个按升序排序的集合的行为。除了 Set 定义的方法外,SortedSet 接口还声明了下表中总结的方法 —
📋 目录
  1. SortedSet 接口方法
  2. SortedSet 接口的操作
  3. SortedSet 接口示例
  4. SortedSet 接口的优势
  5. SortedSet 接口的劣势
A A

Java - SortedSet 接口



上一个
测验
下一个

SortedSet 接口 扩展了 Set,并声明了一个按升序排序的集合的行为。除了 Set 定义的方法外,SortedSet 接口还声明了下表中总结的方法 —

当调用集合中不包含元素时,几个方法会抛出 NoSuchElementException。如果对象与集合中的元素不兼容,则会抛出 ClassCastException。

如果尝试使用 null 对象且集合不允许 null,则会抛出 NullPointerException。

SortedSet 接口方法

序号 方法 & 描述
1

Comparator comparator( )

返回调用 sorted set 的 comparator。如果该 set 使用自然排序,则返回 null。

2

Object first( )

返回调用 sorted set 中的第一个元素。

3

SortedSet headSet(Object end)

返回一个 SortedSet,其中包含调用 sorted set 中小于 end 的元素。返回的 sorted set 中的元素也由调用 sorted set 引用。

4

Object last( )

返回调用 sorted set 中的最后一个元素。

5

SortedSet subSet(Object start, Object end)

返回一个 SortedSet,其中包含 start 和 end 之间的元素。返回的集合中的元素也由调用对象引用。

6

SortedSet tailSet(Object start)

返回一个 SortedSet,其中包含 sorted set 中大于或等于 start 的元素。返回的 set 中的元素也由调用对象引用。

SortedSet 接口的操作

创建 SortedSet

TreeSet 类实现了 SortedSet 接口。我们可以使用 TreeSet 构造函数来创建 SortedSet 实例。以下是创建 SortedSet 实例的语法:

语法

// 创建 sorted set
SortedSet<String> set = new TreeSet<>();

这里我们创建了一个 String 值的 sorted set。该集合将存储唯一的字符串值。如果添加重复值,则将被丢弃。

向 SortedSet 添加值

SortedSet 提供了 add() 方法,可用于向 SortedSet 实例添加值。每当向集合添加值时,都会与现有值进行检查。如果集合被修改,则方法返回 true,否则返回 false。

语法

public boolean add(E e)

其中 E 表示要添加的元素。如果元素已存在,则不执行任何操作,方法返回 false。

示例

// 向集合添加元素
set.add("b");
set.add("c");
set.add("a");

从 SortedSet 获取值

为了从 SortedSet 获取值,我们需要使用 iterator() 方法从 SortedSet 获取 iterator 对象。一旦 iterator 对象可用,就可以用来检索 SortedSet 中的值。

示例

// 遍历集合中的元素
Iterator it = set.iterator();
while (it.hasNext()) {        
 // 获取元素
 Object element = it.next();
 System.out.println(element.toString());
}

从 SortedSet 删除值

使用 remove(value) 方法,可以轻松删除 SortedSet 中存储的值/对象。

语法

public boolean remove(Object value)

如果值不在集合中,则返回 false;否则删除该值并返回 true。

set.remove("a");

遍历 SortedSet

SortedSet 中的条目可以轻松导航。SortedSet 提供 iterator() 方法,该方法提供了一个 iterator 来导航集合的所有条目。

语法

public Iterator<E> iterator()

其中 E 是要遍历的对象类型。

示例

// 遍历集合中的元素
Iterator it = set.iterator();

while (it.hasNext()) {
 // 获取元素
 Object element = it.next();
 System.out.println(element.toString());
}

SortedSet 接口示例

向 SortedSet 添加元素的示例

SortedSet 在诸如 TreeSet 等各种类中有其实现。以下是 TreeSet 类中带有 add 操作的示例 −

import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;

public class SortedSetDemo {

   public static void main(String[] args) {
      // 创建 sorted set
      SortedSet<String> set = new TreeSet<>();  

      // 向 set 中添加元素
      set.add("b");
      set.add("c");
      set.add("a");

      // 遍历 set 中的元素
      Iterator it = set.iterator();

      while (it.hasNext()) {
         
         // 获取元素
         Object element = it.next();
         System.out.println(element.toString());
      }
   }
}

输出

a
b
c

从 SortedSet 中移除元素的示例

SortedSet 在诸如 TreeSet 等各种类中有其实现。以下是 TreeSet 类中带有 add 和 remove 操作的示例 −

import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;

public class SortedSetDemo {

   public static void main(String[] args) {
      // 创建 sorted set
      SortedSet<String> set = new TreeSet<>();  

      // 向 set 中添加元素
      set.add("b");
      set.add("c");
      set.add("a");
      set.add("d");
      set.add("e");
      set.add("f");
      
      // 移除元素
      set.remove("c");
      set.remove("f");

      // 遍历 set 中的元素
      Iterator it = set.iterator();

      while (it.hasNext()) {
         // 获取元素
         Object element = it.next();
         System.out.println(element.toString());
      }
   }
}

输出

a
b
d
e

清空 SortedSet 的示例

SortedSet 在诸如 TreeSet 等各种类中有其实现。以下是 TreeSet 类中带有 add 和 clear 操作的示例 −

import java.util.Iterator;
import java.util.SortedSet;
import java.util.TreeSet;

public class SortedSetDemo {

   public static void main(String[] args) {
      // 创建 sorted set
      SortedSet<String> set = new TreeSet<>();  

      // 向 set 中添加元素
      set.add("b");
      set.add("c");
      set.add("a");
      set.add("d");
      set.add("e");
      set.add("f");
      
      System.out.println(set);
      
      // 移除所有元素
      set.clear();
      
      System.out.println(set);
   }
}

输出

[a, b, c, d, e, f]
[]

SortedSet 接口的优势

  • SortedSet 确保集合始终按值的升序排序。每当向 SortedSet 添加键值对时,它都会重新排序。
  • 由于具有排序和唯一性,SortedSet 在搜索方面非常高效。
  • 我们可以通过对值类型使用 comparator 来自定义排序机制。

SortedSet 接口的劣势

  • 由于每次添加或更改条目时 SortedSet 实例都必须排序,因此在更改非常频繁的情况下会成为性能瓶颈。在这种情况下,不推荐使用 SortedSet。
  • 由于 SortedSet 只维护唯一记录,因此在数据集中可能出现重复条目的情况下无法使用此集合。