Set 集合

简介: Set是一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) = true 的元素对 e1 和 e2;也不包含满足 e1.compareTo(e2)=0 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。 Set接口有三个实现。 1.HashSet 快速查找。必须同

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:


目录
相关文章
|
1月前
|
Java
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
3月前
|
Dart
Dart之集合详解(List、Set、Map)
Dart之集合详解(List、Set、Map)
|
3月前
|
存储 JavaScript 前端开发
JavaScript进阶-Map与Set集合
【6月更文挑战第20天】JavaScript的ES6引入了`Map`和`Set`,它们是高效处理集合数据的工具。`Map`允许任何类型的键,提供唯一键值对;`Set`存储唯一值。使用`Map`时,注意键可以非字符串,用`has`检查键存在。`Set`常用于数组去重,如`[...new Set(array)]`。了解它们的高级应用,如结构转换和高效查询,能提升代码质量。别忘了`WeakMap`用于弱引用键,防止内存泄漏。实践使用以加深理解。
63 3
|
1月前
|
Java 程序员 C语言
赶快收藏!全网最佳Set集合详解:HashSet、TreeSet!
面试官:那TreeSet要怎么定制排序?TreeSet的自定义排序我们要利用Comparator接口,通过向TreeSet传入自定义排序规则的Comparator来实现。官方源码是这么解释的,南友们看一看。// 构造一个新的空树集,根据指定的比较器进行排序。// 插入到集合中的所有元素都必须能够通过指定的比较器相互比较: comparator. compare(e1, e2)不得对集合中的任何元素e1和e2抛出ClassCastException。
赶快收藏!全网最佳Set集合详解:HashSet、TreeSet!
|
1月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
|
23天前
|
索引 Python 容器
为什么Python中会有集合set类型?
为什么Python中会有集合set类型?
|
1月前
|
存储 NoSQL 算法
Redis6入门到实战------ 三、常用五大数据类型(列表(List)、集合(Set)、哈希(Hash)、Zset(sorted set))
这是关于Redis 6入门到实战的文章,具体内容涉及Redis的五大数据类型:列表(List)、集合(Set)、哈希(Hash)、有序集合(Zset(sorted set))。文章详细介绍了这些数据类型的特点、常用命令以及它们背后的数据结构。如果您有任何关于Redis的具体问题或需要进一步的帮助,请随时告诉我。
|
1月前
|
Java
【Java集合类面试二十二】、Map和Set有什么区别?
该CSDN博客文章讨论了Map和Set的区别,但提供的内容摘要并未直接解释这两种集合类型的差异。通常,Map是一种键值对集合,提供通过键快速检索值的能力,而Set是一个不允许重复元素的集合。
|
1月前
|
存储 Java
java集合框架复习----(3)Set
这篇文章详细介绍了Java集合框架中的Set集合,包括HashSet和TreeSet的特点、实现原理和使用示例,展示了Set集合的无序性、元素唯一性以及如何通过自定义比较器实现元素的排序。
|
1月前
|
Python
python集合类型 (Set Types)
【8月更文挑战第3天】
53 9