Java SortedSet
Java SortedSet接口java.util.SortedSet是java.util.Set接口的子类型。 JavaSortedSet
接口的行为类似于普通的Set,不同之处在于它包含的元素在内部进行排序。这意味着,当我们迭代SortedSet
的元素时,这些元素将按已排序的顺序进行迭代。
TreeSet SortedSet实现
Java Collections API仅具有JavaSortedSet
接口的一种实现java.util.TreeSet
类。 java.util.concurrent
包也具有该接口的实现,但是我将并发实用程序放在这条路径之外。
创建一个树集TreeSet
这是创建JavaTreeSet
实例的示例:
SortedSet sortedSet = new TreeSet();
使用比较器创建树集
可以将" Comparator"," java.util.Comparator"实现传递给" TreeSet"的构造函数。然后,这个"比较器"将决定"树集"中元素的顺序。这是一个用Comparator创建JavaSortedSet
的示例:
Comparator comparator = new MyComparatorImpl(); SortedSet sortedSet = new TreeSet(comparator);
TreeSet排序
JavaSortedSet
使用的默认排序顺序是元素的自然排序顺序。为了使" SortedSet"能够确定元素的自然顺序,这些元素必须实现" java.lang.Comparable"接口。
如果元素没有实现"可比较"接口,则这些元素没有自然顺序。在这种情况下,创建时必须将" Comparator"实现传递给" SortedSet"。 TreeSet类可以在其构造函数中使用Comparator。这是使用Comparator创建Java TreeSet的示例:
Comparator comparator = new MyComparator(); SortedSet sortedSet = new TreeSet(comparator);
升序与降序排序
默认情况下," SortedSet"的元素以升序进行迭代,从"最小"开始向"最大"移动。但是也可以使用TreeSet.descendingIterator()方法以降序迭代元素。这是一个以降序迭代TreeSet元素的示例:
TreeSet treeSet = new TreeSet(); treeSet.add("one"); treeSet.add("two"); treeSet.add("three"); Iterator iterator = treeSet.descendingIterator(); while(iterator.hasNext()) { String element = (String) iterator.next(); System.out.println(element); }
获取比较器使用
如果使用"比较器"创建了" SortedSet",则可以通过" SortedSet"comparator()
方法获得" Comparator"。这是一个通过comparator()
方法获得SortedSet
使用的Comparator
的示例:
Comparator comparator = sortedSet.comparator();
添加元素
我们可以通过普通的Java集合的add()方法,将元素添加到Java的" SortedSet"中。这是向JavaSortedSet
中添加元素的示例:
SortedSet sortedSet = new TreeSet(); sortedSet.add("one");
删除元素
要从" SortedSet"中删除元素,请调用其" remove()"方法,并将要删除的元素作为参数传递。这是从JavaSortedSet
中删除元素的示例:
sortedSet.remove("one");
获取第一个元素
我们可以通过调用SortedSet
的first()
方法来根据其排序顺序获得" SortedSet"的第一个元素。这是一个根据Java
SortedSet`的排序顺序获取第一个元素的示例:
Object firstElement = sortedSet.first();
获取最后一个元素
我们可以通过调用SortedSet
的last()
方法来根据SortedSet
的排序顺序获取最后一个元素。这是一个根据JavaSortedSet
的排序顺序获取最后一个元素的示例:
Object lastElement = sortedSet.last();
迭代SortedSet
迭代JavaSortedSet
的元素的方式与迭代常规JavaSet
的方式相同。我们调用SortedSet``iterator()
方法,该方法返回一个Iterator
,然后我们可以通过该方法迭代元素。这是一个迭代JavaSortedSet
的元素的示例:
SortedSet sortedSet = new TreeSet(); sortedSet.add("one"); sortedSet.add("two"); sortedSet.add("three"); Iterator iterator = sortedSet.iterator(); while(iterator.hasNext()) { String element = (String) iterator.next(); System.out.println(element); }
获取头部的Set
JavaSortedSet
接口有一个名为headSet()
的方法,该方法根据SortedSet
使用的排序顺序返回另一个SortedSet
,其所有元素都小于给定参数值(在该值之前)。这是一个通过JavaSortedSet
的headSet()
方法获取头戴式耳机的示例:
SortedSet sortedSet = new TreeSet(); sortedSet.add("a"); sortedSet.add("b"); sortedSet.add("c"); sortedSet.add("d"); sortedSet.add("e"); SortedSet headSet = sortedSet.headSet("c");
运行此代码后,headSet
将包含元素" a"和" b",因为这两个元素小于传递给headSet( )
方法。
获取尾部的Set
JavaSortedSet
接口有一个名为setSet()
的方法,该方法根据SortedSet
使用的排序顺序返回另一个SortedSet
,其所有元素都大于或者等于(定尾)给定的参数值。 。这是一个通过Java的tailSet()方法从Java的SortedSet获取尾集的示例:
SortedSet sortedSet = new TreeSet(); sortedSet.add("a"); sortedSet.add("b"); sortedSet.add("c"); sortedSet.add("d"); sortedSet.add("e"); SortedSet tailSet = sortedSet.tailSet("c");
运行此代码后,tailSet
将包含元素"" c"," d"和" e",因为这三个元素都大于或者等于(尾部)参数值" c"传递给tailSet()方法的
。
获取子Set
Java的" SortedSet"接口有一个名为" subSet()"的方法,该方法将返回一个新的" SortedSet",它是调用" SubSet()"方法的" SortedSet"的子集。 subSet()方法采用两个参数值,这些参数值指定返回的SortedSet应该包含哪些元素。根据" SortedSet"使用的排序顺序,返回的子集将包含等于或者大于第一个参数且小于第二个参数的所有元素。这是一个通过其SubSet()方法获取Java SortedSet的子集的示例:
SortedSet sortedSet = new TreeSet(); sortedSet.add("a"); sortedSet.add("b"); sortedSet.add("c"); sortedSet.add("d"); sortedSet.add("e"); SortedSet subSet = sortedSet.subSet("c", "e");
运行此代码后,subSet将包含元素" c"和" d",因为麻烦程度等于或者大于" c"(第一个参数),并且小于" e"。 (第二个参数)。
通用SortedSet
当声明类型为" SortedSet"的变量时,可以在其上设置通用类型。有关Java泛型的更多信息,请参见我的Java泛型教程。这是在SortedSet
上设置通用类型的示例:
SortedSet<String> sortedSet = new TreeSet<>();
现在,该" SortedSet"只能包含Java String对象作为元素。除其他外,这意味着我们不再需要将从" SortedSet"获得的对象转换为String。这是一个迭代类型为String的SortedSet
的示例:
SortedSet<String> sortedSet = new TreeSet<>(); sortedSet.add("one"); sortedSet.add("two"); sortedSet.add("three"); Iterator iterator = sortedSet.iterator(); while(iterator.hasNext()) { String element = iterator.next(); System.out.println(element); }
注意,不再需要从iterator.next()
返回的对象进行强制类型转换。因为SortedSet
的通用类型是String,所以编译器知道迭代器是Iterato <String>
,所以next()
返回String对象。