Java集合-SortedSet

SortedSetjava.util.SortedSet)是Set接口的子类Sortedset接口的行为类似于普通Set,但它包含的元素是在内部排序的, 这意味着,当迭代SortedSet的元素时,这些元素将按排序的顺序进行迭代。

SortedSet的实现TreeSet

Collections APISortedSet 中只有一个实现java.util.TreeSet类,java.util.concurrent也有此接口的一个实现java.util.concurrent. ConcurrentSkipListSet

创建TreeSet

下面是创建TreeSet的例子:

 
SortedSet sortedSet = new TreeSet();

Comparator 作为参数创建TreeSet

创建TreeSet时,可以将Comparator 作为构造函数的参数,Comparator 将觉得元素在TreeSet中的排序,下面是例子:

Comparator comparator = new MyComparatorImpl();

SortedSet sortedSet = new TreeSet(comparator);

 

排序顺序

SortedSet默认的排序顺序是自然顺序,为了使SortedSet能够确定元素的自然顺序,元素必须实现java.lang.Comparable接口。如果元素没有实现Comparable接口,那么元素没有自然顺序。另外一种就是,当创建TreeSet时必须将Comparator 的实现作为参数,下面是代码:

Comparator comparator = new MyComparator();

SortedSet sortedSet = new TreeSet(comparator);

 

升序与倒序排序

SortedSet 默认的迭代顺序是升序排序,开始是最小的元素,慢慢变大。但是可以通过TreeSet.descendingIterator()编程降序排序,下面是降序排序的例子:

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);
}

 

获取Comparator

如果创建 SortedSet时使用了 Comparator参数,那么可以通过SortedSet comparator()方法获取Comparator ,下面是例子:

 
Comparator comparator = sortedSet.comparator();

增加元素

和普通的Set一样通过add()方法增加元素:

SortedSet sortedSet = new TreeSet();

sortedSet.add("one");

 

移除元素

可以通过remove()方法移除元素:

 
sortedSet.remove("one");

获取第一个元素

可以通过first()方法获取SortedSet  中排序顺序的第一个元素:

 
Object firstElement = sortedSet.first();

获取最后一个元素

可以通过last()方法获取SortedSet  中排序顺序的最后一个元素:

 
Object lastElement = sortedSet.last();

迭代SortedSet

SortedSet 的迭代和普通的Set迭代一样, SortedSet iterator()方法返回一个Iterator,然后可以通过这个Iterator迭代元素,下面是例子:

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

SortedSet接口的 headSet()方法,可以返回小于当前元素的 新的SortedSet,下面是代码:

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",因为这两个元素小于"c" 

获取后面的Set

SortedSet接口中tailSet()方法可以返回一个大于等于给定参数元素的 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"

获取子集

SortedSet接口有个subSet()方法,这个方法返回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是可以使用泛型:

SortedSet<String> sortedSet = new TreeSet<>();

 

这个SortedSet 中只能包含String类型的元素,也就是意味着获取元素时不需要再强制类型转换,下面是代码:

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()返回的不许要再强制类型转换,因为使用了泛型。

参考:1. http://tutorials.jenkov.com/java-collections/sortedset.html

   2.https://blog.csdn.net/cgsyck/article/details/108361971

          3.https://blog.csdn.net/cgsyck/article/details/108276863

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值