且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Set 集合

更新时间:2022-08-22 22:15:48

Set是一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) = true 的元素对 e1 和 e2;也不包含满足 e1.compareTo(e2)=0 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。

Set接口有三个实现。

1.HashSet

快速查找。必须同时重写 hashCode()  与 equals()。

2.LinkedHashSet

按插入的次序保存。

3.TreeSet

类的定义 :public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, java.io.Serializable{}

3.1 NavigableSet接口

这是一个接口,它的定义是 public interface NavigableSet<E> extends SortedSet<E>。

它表明这是一个有序的set,有以下常用方法:

E java.util.NavigableSet.floor(E e)
返回不大于e的最大的元素,若没有返回null。
E java.util.NavigableSet.ceiling(E e)
返回不小于e的最小的元素,若没有返回null。

SortedSet<E> java.util.NavigableSet.subSet(E fromElement, E toElement)

返回值在[fromElement,toElement)范围内的子集。

3.2 内部实现

红黑树实现。红黑树是一棵有序树,所以遍历TreeSet时元素是按照升序排列的。因此,放入其中的元素必须实现Comparable<E>接口。

注意:treeSet中已经有了e1,再调用treeSet.add(e2)试图放入e2,e2与e1的关系满足e1.compareTo(e2)==0,那么e2是不会被放进去的。

若放入的元素没有实现Comparable接口,会报错:java.lang.ClassCastException::yourPojo cannot be cast to java.lang.Comparable。

4.例子

三种set:

有关null: