NavigableSet接口源码理解

文章目录

  • 前言
  • 一、概述
  • 二、源码理解
    • 方法
      • lower
      • floor
      • higher
      • ceiling
      • pollFirst
      • pollLast
      • iterator
      • descendingSet
      • descendingIterator
      • subSet
      • headSet
      • tailSet
  • 总结


前言

本文章帮助大家对NavigableSet接口的理解。


一、概述

NavigableSet意为可导航集合(无特殊说明,本文章“集合”指NavigableSet)。顾名思义,就是同一类对象(元素)的有序“可导航”集合体。它继承于SortedSet接口,其元素是有顺序的,使用其迭代器进行升序遍历。它可更精确地取子集及元素,可取得倒序的可导航集。参考SortedSet接口。

二、源码理解

package java.util;
import java.util.NavigableSet;

使用NavigableSet接口时,需引入此包。

public interface NavigableSet<E> extends SortedSet<E> { /*...*/ }

使用接口时传入泛型E,为集合元素的类型。继承了SortedSet接口,使集合具有SortedSet集合的表现。

方法

lower

E lower(E e);

返回小于元素e的最大元素。若无符合条件的元素,返回空。

若参数元素不能和集合元素比较,可抛出ClassCastException异常;若有参数为空而集合不允许有空值,则抛出NullPointerException异常。

floor

E floor(E e);

返回小于等于元素e的最大元素。若无符合条件的元素,返回空。

若参数元素不能和集合元素比较,可抛出ClassCastException异常;若有参数为空而集合不允许有空值,则抛出NullPointerException异常。

higher

E higher(E e);

返回大于元素e的最大元素。若无符合条件的元素,返回空。

若参数元素不能和集合元素比较,可抛出ClassCastException异常;若有参数为空而集合不允许有空值,则抛出NullPointerException异常。

ceiling

E ceiling(E e);

返回大于等于元素e的最大元素。若无符合条件的元素,返回空。

若参数元素不能和集合元素比较,可抛出ClassCastException异常;若有参数为空而集合不允许有空值,则抛出NullPointerException异常。

pollFirst

E pollFirst();

移除并返回集合的最小值(第一个元素)。若集合为空,返回空。

pollLast

E pollLast();

移除返回集合的最大值(最后一个元素)。若集合为空,返回空。

iterator

Iterator<E> iterator();

重写Set接口的Iterator iterator()方法,参考Set.iterator方法。

返回遍历元素的迭代器,升序遍历。

descendingSet

NavigableSet<E> descendingSet();

返回包含此集合元素的降序可导航集合。有s.descendingSet().descendingSet() == ss.descendingSet().comparator() == Collections.reverseOrder(s.comparator())(参考Collections.reverseOrder方法)。

重点:返回集合受此集合支撑,对返回集合的修改也会反映到此集合上,反之亦然。当其中一个集合在使用迭代器遍历时,其中一个集合的修改(非迭代器删除操作)会使遍历行为未定义。

descendingIterator

Iterator<E> descendingIterator();

返回遍历元素的迭代器,降序遍历。有s.descendingIterator() == s.descendingSet().iterator()

subSet

SortedSet<E> subSet(E fromElement, E toElement);

重写SortedSet接口的SortedSet subSet(E fromElement, E toElement)方法,参考SortedSet.subSet方法。

返回集合的一部分的视图(也为有序集合),其从元素fromElement开始(包含)到toElement结束(不包含)。同SortedSet接口的SortedSet subSet(E fromElement, E toElement)方法。

NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive);

返回集合的一部分的视图(也为可导航集合),其从元素fromElement开始(fromInclusivetrue是包含)到toElement结束(toInclusivetrue是包含)。类似SortedSet subSet(E fromElement, E toElement)方法。

headSet

SortedSet<E> headSet(E toElement);

重写SortedSet接口的SortedSet headSet(E toElement)方法,参考SortedSet.headSet方法。

返回集合的一部分的视图(也为有序集合),其从第一个元素开始(包含)到toElement结束(不包含)。同SortedSet接口的SortedSet headSet(E toElement)方法。

NavigableSet<E> headSet(E toElement, boolean inclusive);

返回集合的一部分的视图(也为可导航集合),其从第一个元素开始(包含)到toElement结束(inclusivetrue为包含)。类似SortedSet headSet(E toElement)方法。

tailSet

SortedSet<E> tailSet(E fromElement);

重写SortedSet接口的SortedSet tailSet(E fromElement)方法,参考SortedSet.tailSet方法。

返回集合的一部分的视图(也为有序集合),其从元素fromElement开始(包含)到最后一个元素结束(包含)。同SortedSet接口的SortedSet tailSet(E fromElement)方法。

NavigableSet<E> tailSet(E fromElement, boolean inclusive);

返回集合的一部分的视图(也为可导航集合),其从元素fromElement开始(inclusivetrue为包含)到最后一个元素结束(包含)。类似SortedSet tailSet(E fromElement)方法。


总结

新人源码理解,望大家多多指点。

你可能感兴趣的:(java,#,jdk14,#,jdk18,java)