Java NavigableSet与实例

Java NavigableSet与实例

NavigableSet在Java集合框架中表示一个可导航的集合。NavigableSet接口继承自SortedSet接口。它的行为类似于SortedSet,除了SortedSet的排序机制外,我们还提供了导航方法。
例如,NavigableSet接口可以按照与SortedSet中定义的顺序相反的顺序导航集合。一个NavigableSet可以以升序或降序的方式被访问和遍历。实现这个接口的类有:TreeSet和ConcurrentSkipListSet。

Java中的NavigableSet与实例

这里,E是这个集合所维护的元素的类型。

所有的超接口

Collection<E>, Iterable<E>, Set<E> , SortedSet<E>

所有已知的实现类

ConcurrentSkipListSet , TreeSet<E>

声明: NavigableSet被声明为

public interface NavigableSet<E> extends SortedSet<E>

创建NavigableSet对象

因为NavigableSet是一个接口,所以不能创建NavigableSet类型的对象。我们总是需要一个扩展这个列表的类来创建一个对象。而且,在Java 1.5引入泛型之后,我们可以限制NavigableSet中可以存储的对象的类型。这个类型安全的集合可以定义为。

// Obj是要存储在NavigableSet中的对象的类型

NavigableSet<Obj> set = new TreeSet<Obj>()

例子

// Java program to demonstrate
// the working of NavigableSet
import java.util.NavigableSet;
import java.util.TreeSet;
 
public class NavigableSetDemo
{
    public static void main(String[] args)
    {
        NavigableSet<Integer> ns = new TreeSet<>();
        ns.add(0);
        ns.add(1);
        ns.add(2);
        ns.add(3);
        ns.add(4);
        ns.add(5);
        ns.add(6);
 
        // Get a reverse view of the navigable set
        NavigableSet<Integer> reverseNs = ns.descendingSet();
 
        // Print the normal and reverse views
        System.out.println("Normal order: " + ns);
        System.out.println("Reverse order: " + reverseNs);
 
        NavigableSet<Integer> threeOrMore = ns.tailSet(3, true);
        System.out.println("3 or  more:  " + threeOrMore);
        System.out.println("lower(3): " + ns.lower(3));
        System.out.println("floor(3): " + ns.floor(3));
        System.out.println("higher(3): " + ns.higher(3));
        System.out.println("ceiling(3): " + ns.ceiling(3));
 
        System.out.println("pollFirst(): " + ns.pollFirst());
        System.out.println("Navigable Set:  " + ns);
 
        System.out.println("pollLast(): " + ns.pollLast());
        System.out.println("Navigable Set:  " + ns);
 
        System.out.println("pollFirst(): " + ns.pollFirst());
        System.out.println("Navigable Set:  " + ns);
 
        System.out.println("pollFirst(): " + ns.pollFirst());
        System.out.println("Navigable Set:  " + ns);
 
        System.out.println("pollFirst(): " + ns.pollFirst());
        System.out.println("Navigable Set:  " + ns);
 
        System.out.println("pollFirst(): " + ns.pollFirst());
        System.out.println("pollLast(): " + ns.pollLast());
    }
}
Java

输出

Normal order: [0, 1, 2, 3, 4, 5, 6]
Reverse order: [6, 5, 4, 3, 2, 1, 0]
3 or  more:  [3, 4, 5, 6]
lower(3): 2
floor(3): 3
higher(3): 4
ceiling(3): 3
pollFirst(): 0
Navigable Set:  [1, 2, 3, 4, 5, 6]
pollLast(): 6
Navigable Set:  [1, 2, 3, 4, 5]
pollFirst(): 1
Navigable Set:  [2, 3, 4, 5]
pollFirst(): 2
Navigable Set:  [3, 4, 5]
pollFirst(): 3
Navigable Set:  [4, 5]
pollFirst(): 4
pollLast(): 5
Java

对NavigableSet执行各种操作

由于NavigableSet是一个接口,它只能与实现该接口的类一起使用。TreeSet就是实现了NavigableSet接口的类。现在,让我们看看如何在TreeSet上执行一些常用的操作。

1.添加元素: 为了向NavigableSet添加一个元素,我们可以使用add()方法。然而,插入的顺序在TreeSet中没有被保留。在内部,每一个元素的值都是按照升序进行比较和排序的。我们需要注意的是,重复的元素是不允许的,所有重复的元素都会被忽略。而且,NavigableSet也不接受空值。

// Java code to demonstrate
// adding of elements in
// NavigableSet
import java.util.*;
import java.io.*;
 
class NavigableSetDemo {
 
    public static void main(String[] args)
    {
        NavigableSet<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);
    }
}
Java

输出

[A, B, C]
Java

2.访问元素: 在添加元素后,如果我们想访问这些元素,我们可以使用内置的方法,如contains(), first(), last()等。

  • contains()
  • first()
  • last()
// Java program to access
// the elements of NavigableSet
import java.util.*;
import java.io.*;
 
class NavigableSetDemo {
 
    public static void main(String[] args)
    {
        NavigableSet<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("Navigable Set is " + ts);
 
        String check = "D";
 
        // Check if the above string exists in
        // the NavigableSet or not
        System.out.println("Contains " + check + " "
                           + ts.contains(check));
 
        // Print the first element in
        // the NavigableSet
        System.out.println("First Value " + ts.first());
 
        // Print the last element in
        // the NavigableSet
        System.out.println("Last Value " + ts.last());
    }
}
Java

输出

Navigable Set is [A, B, C]
Contains D false
First Value A
Last Value C
Java

3.删除数值: 可以使用remove(), pollFirst(), pollLast()方法从NavigableSet中删除数值。

  • remove()
  • pollFirst()
  • pollLast()
// Java Program to remove the
// elements from NavigableSet
import java.util.*;
import java.io.*;
 
class NavigableSetDemo {
 
    public static void main(String[] args)
    {
        NavigableSet<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);
 
        // Remove the First element of TreeSet
        ts.pollFirst();
 
        System.out.println(
            "After the removal of First Element " + ts);
 
        // Remove the Last element of TreeSet
        ts.pollLast();
 
        System.out.println(
            "After the removal of Last Element " + ts);
    }
}
Java

输出

Initial TreeSet [A, B, C, D, E]
After removing element [A, C, D, E]
After the removal of First Element [C, D, E]
After the removal of Last Element [C, D]
Java

4.遍历NavigableSet: 有各种方法来遍历NavigableSet。最著名的是使用增强的for循环。

// Java program to iterate
// through NavigableSet
 
import java.util.*;
import java.io.*;
 
class NavigableSetDemo {
   
    public static void main(String[] args)
    {
        NavigableSet<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 NavigableSet
        for (String value : ts)
            System.out.print(value + ", ");
        System.out.println();
    }
}
Java

输出

A, B, C, D, E, Z,  
Java

可导航集的方法

以下是NavigableSet接口中的方法。

方法 描述
ceiling(E e) 返回这个集合中大于或等于给定元素的最小元素,如果没有这样的元素,则返回空。
descendingIterator() 返回这个集合中的元素的迭代器,按降序排列。
descendingSet() 返回这个集合中所包含的元素的反向顺序视图。
floor(E e) 返回这个集合中小于或等于给定元素的最大元素,如果没有这样的元素,则返回空。
headSet(E toElement) 返回这个集合中元素严格小于toElement的部分的视图。
headSet(E toElement, boolean inclusive) 返回这个集合中元素小于(或等于,如果包容性为真)toElement的部分的视图。
higher(E e) 返回这个集合中严格大于给定元素的最小元素,如果没有这样的元素,则返回空。
iterator() 返回这个集合中的元素的迭代器,按升序排列。
lower(E e) 返回这个集合中严格小于给定元素的最大元素,如果没有这样的元素,则返回null。
pollFirst() 检索并删除第一个(最低)元素,如果这个集合是空的,则返回null。
pollLast() 检索并删除最后一个(最高)元素,如果这个集合是空的,则返回null。
subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) 返回这个集合中元素范围从fromElement到toElement的部分的视图。
subSet(E fromElement, E toElement) 返回这个集合中元素范围从fromElement(包括)到toElement(不包括)的部分的视图。
tailSet(E fromElement) 返回这个集合中元素大于或等于fromElement的部分的视图。
tailSet(E fromElement, boolean inclusive) 返回这个集合中元素大于(或等于,如果包容性为真)fromElement的部分的视图。

从java.util.SortedSet接口继承的方法

方法 描述
comparator() 该方法返回用于对这个集合中的元素进行排序的比较器,如果这个集合使用其元素的自然排序,则返回空。
first() 这个方法返回这个集合中存在的第一个(最低)元素。
last() 该方法返回集合中的最后一个(最高)元素。
spliterator() 在这个排序的集合中的元素上创建一个Spliterator。

从java.util.Set接口继承的方法

方法 描述
add(element) 这个方法用来添加一个特定的元素到集合中。只有当指定的元素还没有出现在集合中时,该函数才会添加该元素,否则,如果该元素已经出现在集合中,该函数会返回False。
addAll(collection) 这个方法用于将所述集合中的所有元素追加到现有的集合中。这些元素是随机添加的,不遵循任何特定的顺序。
clear() 这个方法用来从集合中删除所有的元素,但不是删除集合。该集合的引用仍然存在。
contains(element) 这个方法用来检查一个特定的元素是否存在于集合中。
containsAll(collection) 这个方法用来检查集合是否包含了存在于给定集合中的所有元素。 如果集合包含所有的元素,该方法返回true;如果有任何元素丢失,则返回false。
equals() 将指定的对象与这个集合进行比较,看是否相等。
hashCode() 该方法用于获取该集合实例的hashCode值。它返回一个整数值,该值是这个Set实例的hashCode值。
isEmpty() 这个方法用来检查一个NavigableSet是否为空。
remove(element) 这个方法用来从集合中删除给定的元素。如果指定的元素存在于集合中,该方法返回True,否则返回False。
removeAll(collection) 该方法用于从集合中删除所有存在于集合中的元素。如果这个集合因调用而改变,该方法返回真。
retainAll(collection) 这个方法用于保留集合中的所有元素,这些元素在给定的集合中被提及。如果这个集合在调用后发生了变化,该方法将返回true。
size() 这个方法用来获取集合的大小。它返回一个整数值,表示元素的数量。
toArray() 这个方法用来形成一个与集合相同元素的数组。
toArray(T[] a) 返回一个包含这个集合中所有元素的数组;返回的数组的运行时类型是指定数组的类型。

java.util.Collection接口中声明的方法

方法 描述
parallelStream() 返回一个以该集合为源的可能的并行流。
removeIf(Predicate<? super E> filter) 删除这个集合中满足给定谓词的所有元素。
stream() 返回一个以这个集合为源的顺序流。
toArray(IntFunction<T[]> generator) 返回一个包含此集合中所有元素的数组,使用提供的生成器函数来分配返回的数组。

java.lang.Iterable接口中声明的方法

方法 描述
forEach(Consumer<? super T> action) 对Iterable中的每个元素执行给定的动作,直到所有元素都被处理完,或者该动作抛出一个异常。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册