系列文章目录
3.集合-ArrayList源码分析(面试)_喜欢吃animal milk的博客-CSDN博客
4.数据结构-哈希表_喜欢吃animal milk的博客-CSDN博客
文章目录
目录
前言
大家好,今天给大家讲一下set系列集合的相关知识
一 . 什么是set?
在 Java 中,Set 是一种集合类型,它是一个不允许包含重复元素的集合。Set 接口继承自 Collection 接口,定义了一些用于操作和管理集合的方法。
继承体系:
Set 的特点如下:
-
不允许重复元素:Set 中的元素是唯一的,不会包含重复的元素。当向 Set 中添加重复元素时,添加操作会被忽略。
-
无序性:Set 中的元素没有固定的顺序,不会按照元素的插入顺序或者排序顺序进行存储。因此,不能通过索引来访问 Set 中的元素。
-
无索引: 没有带索引的方法,所以无法使用普通for循环遍历,也不能通过索引来获取元素
常见的 Set 实现类有 HashSet、LinkedHashSet 和 TreeSet。
-
HashSet:HashSet 使用哈希表来存储元素,具有较好的插入和查找性能。由于哈希表的特性,HashSet 中的元素是无序的。
-
LinkedHashSet:LinkedHashSet 在 HashSet 的基础上,使用链表维护元素的插入顺序,因此可以保持元素的插入顺序。
-
TreeSet:TreeSet 使用红黑树(一种自平衡的二叉查找树)来存储元素,并且可以保持元素的排序顺序。
Set 接口定义了一系列方法,如添加元素、删除元素、判断元素是否存在等。常见的方法有:
- add(E e):向 Set 中添加元素。
- remove(Object o):从 Set 中删除指定的元素。
- contains(Object o):判断 Set 中是否包含指定的元素。
- size():返回 Set 中元素的数量。
- isEmpty():判断 Set 是否为空。
通过使用 Set,可以方便地管理和操作不允许包含重复元素的集合。
二 . HashSet
HashSet 是 Java 中的一种 Set 接口的实现类,它使用哈希表来存储元素,具有以下特点:
-
不允许重复元素:HashSet 中的元素是唯一的,不会包含重复的元素。当向 HashSet 中添加重复元素时,添加操作会被忽略。
-
无序性:HashSet 中的元素没有固定的顺序,不会按照元素的插入顺序或者排序顺序进行存储。因此,不能通过索引来访问 HashSet 中的元素。
-
元素的判定:HashSet 使用元素的 equals() 方法和 hashCode() 方法来判断元素是否重复。因此,添加到 HashSet 中的元素必须正确实现 equals() 方法和 hashCode() 方法。
-
无索引: 没有带索引的方法,所以无法使用普通for循环遍历,也不能通过索引来获取元素
HashSet 在实际应用中常用于去重的操作,可以快速判断一个元素是否已经存在于集合中,并且可以高效地添加和删除元素。由于 HashSet 使用哈希表来存储元素,所以它的插入和查找操作的时间复杂度都是 O(1)。
数组+链表
数组+链表+红黑树
三 . LikedHashSet
在LikedHashSet中,元素的存储是无序的,不允许有重复元素。它的底层实现是一个哈希表,通过哈希函数将元素映射到哈希表的位置上。当插入或删除元素时,LikedHashSet会调用哈希函数来确定元素的位置,并在该位置上进行操作。
LikedHashSet的优点是在插入、删除和查找元素时具有较高的效率。由于使用了哈希表,元素的插入和删除操作的平均时间复杂度是O(1),查找操作的平均时间复杂度也是O(1)。但是,由于哈希表的大小是有限的,当元素的数量较多时,可能会导致哈希冲突,影响操作的效率。
应用场景: 去重且存取有序
四 . TreeSet
TreeSet是Java中的一个有序集合数据结构,它实现了SortedSet接口,并且使用红黑树(Red-Black Tree)作为底层数据结构来存储元素。
与HashSet和LinkedHashSet不同,TreeSet中的元素是有序的。它根据元素的自然顺序或者通过Comparator接口提供的排序规则来对元素进行排序。在TreeSet中,元素默认按照从小到大进行排序,或者可以通过构造函数指定一个Comparator来进行自定义排序。
总结
这篇博客主要讲解了set系列的集合的相关内容,大家多多支持,我们下一篇博客见