Java中的SortedSet接口及用法示例

存在于SortedSet接口中java.util程序包扩展了存在于收集框架。它是实现数学集的接口。该接口包含从Set接口继承的方法, 并添加了一个功能, 该功能将所有元素存储在此接口中, 以有序方式存储。

Java中的SortedSet接口及用法示例

文章图片
在上图中, 可导航集合扩展了已排序集合的界面。由于集合不保留插入顺序, 因此可导航的集合界面提供了在集合中导航的实现。实现可导航集的类是TreeSet, 它是自平衡树的实现。因此, 该界面为我们提供了一种浏览该树的方式。
宣言:SortedSet接口声明为:
公共接口SortedSet扩展Set
排序集示例:
// Java program to demonstrate the // Sorted Set import java.util.*; class SortedSetExample{public static void main(String[] args) { SortedSet< String> ts = new TreeSet< String> (); // Adding elements into the TreeSet // using add() ts.add( "India" ); ts.add( "Australia" ); ts.add( "South Africa" ); // Adding the duplicate // element ts.add( "India" ); // Displaying the TreeSet System.out.println(ts); // Removing items from TreeSet // using remove() ts.remove( "Australia" ); System.out.println( "Set after removing " + "Australia:" + ts); // Iterating over Tree set items System.out.println( "Iterating over set:" ); Iterator< String> i = ts.iterator(); while (i.hasNext()) System.out.println(i.next()); } }

输出如下:
[Australia, India, South Africa] Set after removing Australia:[India, South Africa] Iterating over set: India South Africa

注意:SortedSet的所有元素必须实现可比的界面(或被指定的比较器接受), 并且所有此类元素必须相互可比较。相互可比只是意味着两个对象彼此接受, 作为其compareTo方法的参数。
创建SortedSet对象
由于SortedSet是一个接口, 则无法创建SortedSet类型的对象。我们总是需要一个扩展此列表的类以创建一个对象。而且, 在引入泛型在Java 1.5中, 可以限制可以存储在SortedSet中的对象的类型。此类型安全集可以定义为:
// Obj是要存储在SortedSet中的对象的类型SortedSet < Obj> set = new TreeSet < Obj> ();
在SortedSet上执行各种操作
由于SortedSet是一个接口, 因此只能与实现此接口的类一起使用。 TreeSet是实现SortedSet接口的类。现在, 让我们看看如何在TreeSet上执行一些常用的操作。
1.添加元素:为了将元素添加到SortedSet中, 我们可以使用add()方法。但是, 插入顺序不会保留在TreeSet中。在内部, 对于每个元素, 将按升序对值进行比较和排序。我们需要注意, 不允许重复元素, 所有重复元素都将被忽略。而且, Null值不被SortedSet接受。
// Java code to demonstrate // the working of SortedSet import java.util.*; class GFG {public static void main(String[] args) { SortedSet< String> ts = new TreeSet< String> (); // Elements are added using add() method ts.add( "A" ); ts.add( "B" ); ts.add( "C" ); ts.add( "A" ); System.out.println(ts); } }

输出如下:
[A, B, C]

2.访问元素:添加元素后, 如果我们希望访问元素, 则可以使用内置方法, 例如contains(), 第一(), 持续()等
// Java code to demonstrate // the working of SortedSetimport java.util.*; class GFG {public static void main(String[] args) { SortedSet< String> ts = new TreeSet< String> (); // Elements are added using add() method ts.add( "A" ); ts.add( "B" ); ts.add( "C" ); ts.add( "A" ); System.out.println( "Sorted Set is " + ts); String check = "D" ; // Check if the above string exists in // the SortedSet or not System.out.println( "Contains " + check + " " + ts.contains(check)); // Print the first element in // the SortedSet System.out.println( "First Value " + ts.first()); // Print the last element in // the SortedSet System.out.println( "Last Value " + ts.last()); } }

输出如下:
Sorted Set is [A, B, C] Contains D false First Value A Last Value C

3.删除值:可以使用以下命令从SortedSet中删除这些值:remove()方法.
// Java code to demonstrate // the working of SortedSetimport java.util.*; class GFG{public static void main(String[] args) { SortedSet< String> ts = new TreeSet< String> (); // Elements are added using add() method ts.add( "A" ); ts.add( "B" ); ts.add( "C" ); ts.add( "B" ); ts.add( "D" ); ts.add( "E" ); System.out.println( "Initial TreeSet " + ts); // Removing the element b ts.remove( "B" ); System.out.println( "After removing element " + ts); } }

输出如下:
Initial TreeSet [A, B, C, D, E] After removing element [A, C, D, E]

4.遍历SortedSet:有多种方法可以遍历SortedSet。最著名的是使用增强了for循环。
// Java code to demonstrate // the working of SortedSetimport java.util.*; class GFG { public static void main(String[] args) { SortedSet< String> ts = new TreeSet< String> (); // Elements are added using add() method ts.add( "C" ); ts.add( "D" ); ts.add( "E" ); ts.add( "A" ); ts.add( "B" ); ts.add( "Z" ); // Iterating though the SortedSet for (String value : ts) System.out.print(value + ", " ); System.out.println(); } }

输出如下:
A, B, C, D, E, Z,

实现SortedSet接口的类是TreeSet。
树集:在集合框架中实现的TreeSet类是SortedSet接口的实现, 并且SortedSet扩展了设置界面。它的行为就像一个简单的集合, 不同之处在于它以排序的格式存储元素。 TreeSet使用树数据结构进行存储。对象按升序存储。但是我们可以使用方法按降序进行迭代TreeSet.descendingIterator()。让我们看看如何使用此类创建一个sortedset对象。
// Java program to demonstrate the // creation of SortedSet object using // the TreeSet classimport java.util.*; class GFG {public static void main(String[] args) { SortedSet< String> ts = new TreeSet< String> (); // Adding elements into the TreeSet // using add() ts.add( "India" ); ts.add( "Australia" ); ts.add( "South Africa" ); // Adding the duplicate // element ts.add( "India" ); // Displaying the TreeSet System.out.println(ts); // Removing items from TreeSet // using remove() ts.remove( "Australia" ); System.out.println( "Set after removing " + "Australia:" + ts); // Iterating over Tree set items System.out.println( "Iterating over set:" ); Iterator< String> i = ts.iterator(); while (i.hasNext()) System.out.println(i.next()); } }

输出如下:
[Australia, India, South Africa] Set after removing Australia:[India, South Africa] Iterating over set: India South Africa

SortedSet接口的方法
【Java中的SortedSet接口及用法示例】以下是SortedSet接口中提供的方法。在此, " *"表示方法是设置界面.
方法 描述
*add(元素) 此方法用于将特定元素添加到集合中。仅当集合中不存在指定的元素时, 该函数才会添加该元素;否则, 如果集合中已存在该元素, 则该函数将返回False。
* addAll(集合) 此方法用于将上述集合中的所有元素附加到现有集合中。元素是随机添加的, 不遵循任何特定顺序。
*clear() 此方法用于从集合中删除所有元素, 但不删除集合。该集合的参考仍然存在。
compare() 此方法返回用于对该集合中的元素进行排序的比较器;如果此集合使用其元素的自然排序, 则返回null。
*contains(元素) 此方法用于检查Set中是否存在特定元素。
* containsAll(集合) 此方法用于检查集合是否包含给定集合中存在的所有元素。如果集合包含所有元素, 则此方法返回true;如果缺少任何元素, 则返回false。
first() 此方法返回此集合中存在的第一个(最低)元素。
hashCode() 此方法用于获取此Set实例的hashCode值。它返回一个整数值, 它是Set的此实例的hashCode值。
headSet(元素) 此方法返回的元素少于排序集中存在的元素。
*isEmpty() 此方法用于检查SortedSet是否为空。
last() 此方法返回集合中存在的last(最高)元素。
* delete(元素) 此方法用于从集合中删除给定的元素。如果Set中存在指定的元素, 则此方法返回True, 否则返回False。
* removeAll(集合) 此方法用于从集合中删除集合中存在的所有元素。如果此设置因调用而更改, 则此方法返回true。
* retainAll(集合) 此方法用于保留给定集合中提到的集合中的所有元素。如果此设置因调用而更改, 则此方法返回true。
* size() 此方法用于获取集合的大小。这将返回一个整数值, 表示元素的数量。
subSet(element1, element2) 此方法从包含element1和element2之间的元素的集合返回排序后的子集。
tailSet(元素) 此方法返回大于或等于排序集中存在的元素的元素。
* toArray() 此方法用于形成与Set相同元素的数组。

    推荐阅读