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