NavigableSet(java.util.NavigableSet
)接口是
SortedSet 接口的一个子接口。因此, NavigableSet
和SortedSet很相似,但是,除了SortedSet的排序机制之外,还提供了一组额外的导航方法,本篇文章将讲述NavigableSet的这些导航方法。
NavigableSet的实现
从Java 6 到13,NavigableSet
在java.util
包中只有一个实现类java.util.TreeSet类,java.util.concurrent中也有一个实现ConcurrentSkipListSet
,本文暂时不讲述。
创建NavigableSet
创建NavigableSet
必须创建 NavigableSet
接口的一个实例,我们使用 TreeSet
:
NavigableSet navigableSet = new TreeSet();
descendingSet()
descendingSet()
方法的作用是:返回一个NavigableSet,其中元素的顺序与原来的NavigableSet
相反,返回的“view”由原始NavigableSet支持,因此对降序集的更改也会反映在原始集合中,下面是例子:
NavigableSet reverse = original.descendingSet();
descendingIterator()
descendingIterator()
方法允许方向迭代
NavigableSet
(和SortedSet
一样
) 中的元素,而不改变其内部本身的元素:
Iterator reverse = original.descendingIterator();
headSet()
headSet()
方法返回 NavigableSet
的一个视图,这里面的元素小于给定的元素
:
NavigableSet original = new TreeSet();
original.add("1");
original.add("2");
original.add("3");
//this headset will contain "1" and "2"
SortedSet headset = original.headSet("3");
//this headset will contain "1", "2", and "3" because "inclusive"=true
NavigableSet headset = original.headSet("3", true);
tailSet()
tailSet()
方法和
headSet()
方法很相似,除了一点是大于等于给点的元素:
NavigableSet original = new TreeSet();
original.add("1");
original.add("2");
original.add("3");
//this tailSet will contain "2" and "3"
SortedSet tailSet = original.tailSet("2");
//this tailSet will contain "3" only because "inclusive"=false
NavigableSet tailSet = original.tailSet("2", false);
subSet()
subSet()
方法允许传入两个参数,返回一个限定范围的视图,这个视图包括第一个参数,不包括第二个参数:
NavigableSet original = new TreeSet();
original.add("1");
original.add("2");
original.add("3");
original.add("4");
original.add("5");
//this subset will contain "2" and "3"
SortedSet subset = original.subSet("2", "4");
//this subset will contain "2", "3" and "4" because
// fromInclusive=true, and toInclusive=true
NavigableSet subset = original.subSet("2", true, "4", true);
ceiling()
ceiling()
方法返回此set中大于或等于给定元素的最小元素
:
NavigableSet original = new TreeSet();
original.add("1");
original.add("3");
original.add("5");
//ceiling will be "3".
Object ceiling = original.ceiling("2");
floor()
floor()
方法和
ceiling()
方法对应,返回此集合中小于或等于给定元素的最大元素
:
NavigableSet original = new TreeSet();
original.add("1");
original.add("3");
original.add("5");
//floor will be "1".
Object floor = original.floor("2");
higher()
higher()
方法返回此set中大于给定元素的最小元素
:
NavigableSet original = new TreeSet();
original.add("1");
original.add("2");
original.add("3");
//higher will be "3".
Object higher = original.higher("2");
lower()
lower()
方法和higher()方法相对应,返回此set中小于给定元素的最大元素
:
NavigableSet original = new TreeSet();
original.add("1");
original.add("2");
original.add("3");
//lower will be "1"
Object lower = original.lower("2");
pollFirst()
pollFirst()
返回并且移除
NavigableSet
中的第一个元素,如果集合是空返回null:
NavigableSet original = new TreeSet();
original.add("1");
original.add("2");
original.add("3");
//first is "1"
Object first = original.pollFirst();
pollLast()
pollLast()
返回和移除
NavigableSet
中的最后一个元素:
NavigableSet original = new TreeSet();
original.add("1");
original.add("2");
original.add("3");
//last is "3"
Object last = original.pollLast();
参考:1.
https://blog.youkuaiyun.com/cgsyck/article/details/108377431
2. http://tutorials.jenkov.com/java-collections/navigableset.html