首页 > Python资料 博客日记
Java中的Set(如果想知道Java中有关Set的知识点,那么只看这一篇就足够了!)
2024-08-11 12:00:06Python资料围观57次
前言:在Java编程中,集合框架(Collections Framework)是处理数据结构和算法的基础工具之一。它提供了一套强大且灵活的接口和类,用于存储和操作不同类型的数据集合。在这其中,Set
接口扮演着一个重要角色。与其他集合类型如List
和Map
不同,Set
强调的是集合中元素的唯一性。这使得它在需要去重、快速查找等场景下显得尤为重要。
✨✨✨这里是秋刀鱼不做梦的BLOG
✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客
先让我们看一下本文大致的讲解内容:
目录
(9)boolean containsAll(Collection c)
(10)boolean addAll(Collection c)
1.Set概念的简介
(1)Set的定义
在Java中,Set
接口是Java集合框架的一部分,用于表示一组唯一的元素。与List
不同,Set
不允许包含重复的元素。这意味着即使尝试将相同的元素添加多次,Set
中也只会保留一个实例。Set
接口继承自Collection
接口,因此它也拥有一些集合框架中通用的方法。
Set的主要特点:
- 无序性:
Set
中的元素没有特定的顺序,这意味着你不能通过索引来访问Set
中的元素。- 唯一性:
Set
中的每个元素都是唯一的,即不能包含重复的元素。- 允许null值:大多数
Set
实现都允许包含一个null值,但不能有多个null值。
我相信读者如果初次学习Java中的Set类的话,可能对上面对Java中Set类的解释不能够很好的理解,不过没有关系,读者继续向下阅读即可。
(2)Set类在Java集合类中的关系
了解了Set类的基本定义之后,现在再让我们看看Set类在Java的集合框架中的的关系,如下图:
从上图我们可以得知,Java中的Set类也实现了Collection接口,那么Set类也就实现了Collection接口中的方法,即可以使用其中的方法。
——至此,通过上边的学习了解之后,这样我们就大致的了解了Java中的Set究竟是什么东西了。
2.Set接口中常用的API
在Java中,Set是继承自Collection的接口类,但是相较于Java中的Map类,Set中只存储了Key,所以对于Set而言,其方法大都是操作其中的Key的,以下是Set
接口的主要方法:
方法 | 解释 |
---|---|
boolean add(E e) | 添加元素,但重复元素不会被添加成功 |
void clear() | 清空集合 |
boolean contains(Object o) | 判断 o 是否在集合中 |
Iterator<E> iterator() | 返回迭代器 |
boolean remove(Object o) | 删除集合中的 o |
int size() | 返回set中元素的个数 |
boolean isEmpty() | 检测set是否为空,空返回true,否则返回false |
Object[] toArray() | 将set中的元素转换为数组返回 |
boolean containsAll(Collection<?> c) | 集合c中的元素是否在set中全部存在,是返回true,否则返回 false |
boolean addAll(Collection<? extends E> c) | 将集合c中的元素添加到set中,可以达到去重的效果 |
这里我们对上述方法进行逐一使用代码进行实例解释:
(1)boolean add(E e)
——向集合中添加指定的元素。如果集合中不存在该元素,则返回true
;如果集合中已存在该元素,则返回false
。
import java.util.HashSet;
import java.util.Set;
public class AddExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
boolean added1 = set.add("Apple");
boolean added2 = set.add("Banana");
boolean added3 = set.add("Apple"); // 尝试添加重复元素
System.out.println(set);
}
}
输出:
[Apple, Banana]
(2)void clear()
——移除集合中的所有元素,使集合变为空集。
import java.util.HashSet;
import java.util.Set;
public class ClearExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Cherry");
System.out.println("Set before clear: " + set);
set.clear();
System.out.println("Set after clear: " + set);
}
}
输出:
Set before clear: [Apple, Banana, Cherry]
Set after clear: []
(3)boolean contains(Object o)
——如果集合中包含指定的元素,则返回true
;否则返回false
。
import java.util.HashSet;
import java.util.Set;
public class ContainsExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
boolean containsApple = set.contains("Apple");
boolean containsCherry = set.contains("Cherry");
System.out.println("Set contains 'Apple': " + containsApple);
System.out.println("Set contains 'Cherry': " + containsCherry);
}
}
输出:
Set contains 'Apple': true
Set contains 'Cherry': false
(4)Iterator<E> iterator()
——返回在集合中的元素上进行迭代的迭代器。
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class IteratorExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Cherry");
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
System.out.println(element);
}
}
}
输出:
Apple
Banana
Cherry
(5)boolean remove(Object o)
——从集合中移除指定的元素。如果集合中存在该元素,则返回true
;否则返回false
。
public class RemoveExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
boolean removed = set.remove("Banana");
boolean notRemoved = set.remove("Cherry");
System.out.println(set);
System.out.println(removed);
System.out.println(notRemoved);
}
}
输出:
[Apple]
true
false
(6)int size()
——返回集合中元素的数量。
import java.util.HashSet;
import java.util.Set;
public class SizeExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Cherry");
int size = set.size();
System.out.println("Set size: " + size);
}
}
输出:
Set size: 3
(7)boolean isEmpty()
——如果集合不包含任何元素,则返回true
;否则返回false
。
public class IsEmptyExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
boolean isEmptyBeforeAdd = set.isEmpty();
set.add("Apple");
boolean isEmptyAfterAdd = set.isEmpty();
System.out.println(isEmptyBeforeAdd);
System.out.println(isEmptyAfterAdd);
}
}
输出:
true
false
(8)Object[] toArray()
——返回包含集合中所有元素的数组。
import java.util.HashSet;
import java.util.Set;
public class ToArrayExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Cherry");
Object[] array = set.toArray();
for (Object element : array) {
System.out.println((String) element);
}
}
}
输出:
Apple
Banana
Cherry
(9)boolean containsAll(Collection<?> c)
——如果集合包含指定集合中的所有元素,则返回true
;否则返回false
。
public class ContainsAllExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Cherry");
List<String> list = Arrays.asList("Apple", "Banana");
boolean containsAll = set.containsAll(list);
System.out.println(containsAll);
}
}
输出:
true
(10)boolean addAll(Collection<? extends E> c)
——将指定集合中的所有元素添加到集合中。如果集合因调用而发生改变,则返回true
。
import java.util.HashSet;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
public class AddAllExample {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
set.add("Apple");
List<String> list = Arrays.asList("Banana", "Cherry", "Apple");
boolean isChanged = set.addAll(list);
System.out.println("Set after addAll: " + set);
System.out.println("Was the set changed? " + isChanged);
}
}
输出:
Set after addAll: [Apple, Banana, Cherry]
Was the set changed? true
这样我们就了解了Java中Set中常用的API了!
3.Set的常见实现类
Java中有几个常见的Set
实现类,每个类都有其独特的特性和适用场景。以下是最常见的三种实现:
(1)HashSet
——HashSet
是最常用的Set
实现类之一。它基于哈希表实现,具有快速的插入、删除和查找操作。由于HashSet
不维护元素的顺序,所以其遍历顺序可能与插入顺序不同。
以下为其使用代码:
import java.util.HashSet;
import java.util.Set;
public class HashSetExample {
public static void main(String[] args) {
Set<Integer> hashSet = new HashSet<>();
hashSet.add(1);
hashSet.add(2);
hashSet.add(3);
System.out.println("HashSet: " + hashSet);
}
}
(2)LinkedHashSet
——LinkedHashSet
是HashSet
的子类,它维护着一个双向链表,以保证元素的插入顺序。因此,遍历LinkedHashSet
时,元素将按照其插入顺序返回。
以下为其使用代码:
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSetExample {
public static void main(String[] args) {
Set<String> linkedHashSet = new LinkedHashSet<>();
linkedHashSet.add("One");
linkedHashSet.add("Two");
linkedHashSet.add("Three");
System.out.println("LinkedHashSet: " + linkedHashSet);
}
}
(3)TreeSet
——TreeSet
实现了SortedSet
接口,并基于红黑树实现。它保证元素按自然顺序或指定的比较器顺序排序。
以下为其使用代码:
import java.util.Set;
import java.util.TreeSet;
public class TreeSetExample {
public static void main(String[] args) {
Set<String> treeSet = new TreeSet<>();
treeSet.add("Banana");
treeSet.add("Apple");
treeSet.add("Cherry");
System.out.println("TreeSet: " + treeSet);
}
}
以上就是三种Java中常见的Set类的实现类了!
4.Set的实际案例
在日常的生活工作中,Java中的Set的用武之地还是有很多的,以下是一些实际使用Set
的案例,展示了其在解决具体问题时的应用:
(1)去除重复元素
在数据处理中,通常需要去除重复的元素。Set
的唯一性特性使其非常适合这个任务。
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class RemoveDuplicates {
public static void main(String[] args) {
List<String> list = Arrays.asList("apple", "banana", "apple", "orange", "banana");
Set<String> set = new HashSet<>(list);
System.out.println("Unique elements: " + set);
}
}
(2)查找集合的交集、并集和差集
我们还可以使用Set
可以方便地进行集合操作,如交集、并集和差集。
import java.util.HashSet;
import java.util.Set;
public class SetOperations {
public static void main(String[] args) {
Set<String> set1 = new HashSet<>();
set1.add("A");
set1.add("B");
set1.add("C");
Set<String> set2 = new HashSet<>();
set2.add("B");
set2.add("C");
set2.add("D");
// 并集
Set<String> union = new HashSet<>(set1);
union.addAll(set2);
System.out.println("Union: " + union);
// 交集
Set<String> intersection = new HashSet<>(set1);
intersection.retainAll(set2);
System.out.println("Intersection: " + intersection);
// 差集
Set<String> difference = new HashSet<>(set1);
difference.removeAll(set2);
System.out.println("Difference: " + difference);
}
}
(3)判断两个集合是否相等
我们可以使用Set
的equals
方法来判断两个集合是否相等。两个集合相等的条件是它们包含的元素相同,顺序无关。
import java.util.HashSet;
import java.util.Set;
public class SetEquality {
public static void main(String[] args) {
Set<Integer> set1 = new HashSet<>();
set1.add(1);
set1.add(2);
set1.add(3);
Set<Integer> set2 = new HashSet<>();
set2.add(3);
set2.add(2);
set2.add(1);
System.out.println("Are sets equal? " + set1.equals(set2));
}
}
当然,Java中的Set还有其他的许多用处,这里作者只是简单的列举出几点,其他的作用读者可以在日常中对其进行探索。这样我们就使用Set的实际案例来帮助你进一步理解Java中的Set类。
5.总结
在本文中,我们首先全面探讨了Java中的Set
接口及其使用方法。Set
是Java集合框架的重要组成部分,旨在存储唯一的元素。其主要特点包括元素的唯一性和无序性,使其在需要去重或处理集合操作时非常有用。
接着我们详细介绍了Set
接口中的常用API,如add
、clear
、contains
、iterator
、remove
、size
、isEmpty
、toArray
、containsAll
和addAll
,并通过代码示例演示了这些方法的实际应用。
之后我们还讨论了HashSet
、LinkedHashSet
和TreeSet
这几种常见的Set
实现类,分析了它们的特点和适用场景。
最后通过实际案例,我们展示了如何利用Set
解决实际编程问题,如去除重复元素、进行集合操作和判断集合相等。通过对Set
的深入理解和实际应用,我们能够在开发中更高效地处理集合数据,提升代码的性能和可维护性。
以上就是本篇文章的全部内容了~~~
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj