当前位置:   article > 正文

Java中的Set(如果想知道Java中有关Set的知识点,那么只看这一篇就足够了!)_java set

java set

        前言:在Java编程中,集合框架(Collections Framework)是处理数据结构和算法的基础工具之一。它提供了一套强大且灵活的接口和类,用于存储和操作不同类型的数据集合。在这其中,Set接口扮演着一个重要角色。与其他集合类型如ListMap不同,Set强调的是集合中元素的唯一性。这使得它在需要去重、快速查找等场景下显得尤为重要。


✨✨✨这里是秋刀鱼不做梦的BLOG

✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客

先让我们看一下本文大致的讲解内容:

目录

1.Set概念的简介

        (1)Set的定义

        (2)Set类在Java集合类中的关系

2.Set接口中常用的API

        (1)boolean add(E e)

        (2)void clear()

        (3)boolean contains(Object o)

        (4)Iterator iterator()

        (5)boolean remove(Object o)

        (6)int size()

        (7)boolean isEmpty()

        (8)Object[] toArray()

        (9)boolean containsAll(Collection c)

        (10)boolean addAll(Collection c)

3.Set的常见实现类

        (1)HashSet

        (2)LinkedHashSet

        (3)TreeSet

4.Set的实际案例

        (1)去除重复元素

        (2)查找集合的交集、并集和差集

        (3)判断两个集合是否相等

5.总结


1.Set概念的简介

        (1)Set的定义

        在Java中,Set接口是Java集合框架的一部分,用于表示一组唯一的元素。与List不同,Set不允许包含重复的元素。这意味着即使尝试将相同的元素添加多次,Set中也只会保留一个实例。Set接口继承自Collection接口,因此它也拥有一些集合框架中通用的方法。

        Set的主要特点:

  1. 无序性Set中的元素没有特定的顺序,这意味着你不能通过索引来访问Set中的元素。
  2. 唯一性Set中的每个元素都是唯一的,即不能包含重复的元素。
  3. 允许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

  1. import java.util.HashSet;
  2. import java.util.Set;
  3. public class AddExample {
  4. public static void main(String[] args) {
  5. Set<String> set = new HashSet<>();
  6. boolean added1 = set.add("Apple");
  7. boolean added2 = set.add("Banana");
  8. boolean added3 = set.add("Apple"); // 尝试添加重复元素
  9. System.out.println(set);
  10. }
  11. }

输出:

[Apple, Banana]

        (2)void clear()

        ——移除集合中的所有元素,使集合变为空集。

  1. import java.util.HashSet;
  2. import java.util.Set;
  3. public class ClearExample {
  4. public static void main(String[] args) {
  5. Set<String> set = new HashSet<>();
  6. set.add("Apple");
  7. set.add("Banana");
  8. set.add("Cherry");
  9. System.out.println("Set before clear: " + set);
  10. set.clear();
  11. System.out.println("Set after clear: " + set);
  12. }
  13. }

输出:

  1. Set before clear: [Apple, Banana, Cherry]
  2. Set after clear: []

        (3)boolean contains(Object o)

        ——如果集合中包含指定的元素,则返回true;否则返回false

  1. import java.util.HashSet;
  2. import java.util.Set;
  3. public class ContainsExample {
  4. public static void main(String[] args) {
  5. Set<String> set = new HashSet<>();
  6. set.add("Apple");
  7. set.add("Banana");
  8. boolean containsApple = set.contains("Apple");
  9. boolean containsCherry = set.contains("Cherry");
  10. System.out.println("Set contains 'Apple': " + containsApple);
  11. System.out.println("Set contains 'Cherry': " + containsCherry);
  12. }
  13. }

输出:

  1. Set contains 'Apple': true
  2. Set contains 'Cherry': false

        (4)Iterator<E> iterator()

        ——返回在集合中的元素上进行迭代的迭代器。

  1. import java.util.HashSet;
  2. import java.util.Iterator;
  3. import java.util.Set;
  4. public class IteratorExample {
  5. public static void main(String[] args) {
  6. Set<String> set = new HashSet<>();
  7. set.add("Apple");
  8. set.add("Banana");
  9. set.add("Cherry");
  10. Iterator<String> iterator = set.iterator();
  11. while (iterator.hasNext()) {
  12. String element = iterator.next();
  13. System.out.println(element);
  14. }
  15. }
  16. }

输出:

  1. Apple
  2. Banana
  3. Cherry

        (5)boolean remove(Object o)

        ——从集合中移除指定的元素。如果集合中存在该元素,则返回true;否则返回false

  1. public class RemoveExample {
  2. public static void main(String[] args) {
  3. Set<String> set = new HashSet<>();
  4. set.add("Apple");
  5. set.add("Banana");
  6. boolean removed = set.remove("Banana");
  7. boolean notRemoved = set.remove("Cherry");
  8. System.out.println(set);
  9. System.out.println(removed);
  10. System.out.println(notRemoved);
  11. }
  12. }

输出:

  1. [Apple]
  2. true
  3. false

        (6)int size()

        ——返回集合中元素的数量。

  1. import java.util.HashSet;
  2. import java.util.Set;
  3. public class SizeExample {
  4. public static void main(String[] args) {
  5. Set<String> set = new HashSet<>();
  6. set.add("Apple");
  7. set.add("Banana");
  8. set.add("Cherry");
  9. int size = set.size();
  10. System.out.println("Set size: " + size);
  11. }
  12. }

输出:

Set size: 3

        (7)boolean isEmpty()

        ——如果集合不包含任何元素,则返回true;否则返回false

  1. public class IsEmptyExample {
  2. public static void main(String[] args) {
  3. Set<String> set = new HashSet<>();
  4. boolean isEmptyBeforeAdd = set.isEmpty();
  5. set.add("Apple");
  6. boolean isEmptyAfterAdd = set.isEmpty();
  7. System.out.println(isEmptyBeforeAdd);
  8. System.out.println(isEmptyAfterAdd);
  9. }
  10. }

输出:

  1. true
  2. false

        (8)Object[] toArray()

        ——返回包含集合中所有元素的数组。

  1. import java.util.HashSet;
  2. import java.util.Set;
  3. public class ToArrayExample {
  4. public static void main(String[] args) {
  5. Set<String> set = new HashSet<>();
  6. set.add("Apple");
  7. set.add("Banana");
  8. set.add("Cherry");
  9. Object[] array = set.toArray();
  10. for (Object element : array) {
  11. System.out.println((String) element);
  12. }
  13. }
  14. }

输出:

  1. Apple
  2. Banana
  3. Cherry

        (9)boolean containsAll(Collection<?> c)

        ——如果集合包含指定集合中的所有元素,则返回true;否则返回false

  1. public class ContainsAllExample {
  2. public static void main(String[] args) {
  3. Set<String> set = new HashSet<>();
  4. set.add("Apple");
  5. set.add("Banana");
  6. set.add("Cherry");
  7. List<String> list = Arrays.asList("Apple", "Banana");
  8. boolean containsAll = set.containsAll(list);
  9. System.out.println(containsAll);
  10. }
  11. }

输出:

true

        (10)boolean addAll(Collection<? extends E> c)

        ——将指定集合中的所有元素添加到集合中。如果集合因调用而发生改变,则返回true

  1. import java.util.HashSet;
  2. import java.util.Arrays;
  3. import java.util.List;
  4. import java.util.Set;
  5. public class AddAllExample {
  6. public static void main(String[] args) {
  7. Set<String> set = new HashSet<>();
  8. set.add("Apple");
  9. List<String> list = Arrays.asList("Banana", "Cherry", "Apple");
  10. boolean isChanged = set.addAll(list);
  11. System.out.println("Set after addAll: " + set);
  12. System.out.println("Was the set changed? " + isChanged);
  13. }
  14. }

输出:

  1. Set after addAll: [Apple, Banana, Cherry]
  2. Was the set changed? true

        这样我们就了解了Java中Set中常用的API了!

3.Set的常见实现类

        Java中有几个常见的Set实现类,每个类都有其独特的特性和适用场景。以下是最常见的三种实现:

        (1)HashSet

        ——HashSet是最常用的Set实现类之一。它基于哈希表实现,具有快速的插入、删除和查找操作。由于HashSet不维护元素的顺序,所以其遍历顺序可能与插入顺序不同。

以下为其使用代码:

  1. import java.util.HashSet;
  2. import java.util.Set;
  3. public class HashSetExample {
  4. public static void main(String[] args) {
  5. Set<Integer> hashSet = new HashSet<>();
  6. hashSet.add(1);
  7. hashSet.add(2);
  8. hashSet.add(3);
  9. System.out.println("HashSet: " + hashSet);
  10. }
  11. }

        (2)LinkedHashSet

        ——LinkedHashSetHashSet的子类,它维护着一个双向链表,以保证元素的插入顺序。因此,遍历LinkedHashSet时,元素将按照其插入顺序返回。

以下为其使用代码:

  1. import java.util.LinkedHashSet;
  2. import java.util.Set;
  3. public class LinkedHashSetExample {
  4. public static void main(String[] args) {
  5. Set<String> linkedHashSet = new LinkedHashSet<>();
  6. linkedHashSet.add("One");
  7. linkedHashSet.add("Two");
  8. linkedHashSet.add("Three");
  9. System.out.println("LinkedHashSet: " + linkedHashSet);
  10. }
  11. }

        (3)TreeSet

        ——TreeSet实现了SortedSet接口,并基于红黑树实现。它保证元素按自然顺序或指定的比较器顺序排序。

以下为其使用代码:

  1. import java.util.Set;
  2. import java.util.TreeSet;
  3. public class TreeSetExample {
  4. public static void main(String[] args) {
  5. Set<String> treeSet = new TreeSet<>();
  6. treeSet.add("Banana");
  7. treeSet.add("Apple");
  8. treeSet.add("Cherry");
  9. System.out.println("TreeSet: " + treeSet);
  10. }
  11. }

        以上就是三种Java中常见的Set类的实现类了!

4.Set的实际案例

        在日常的生活工作中,Java中的Set的用武之地还是有很多的,以下是一些实际使用Set的案例,展示了其在解决具体问题时的应用:

        (1)去除重复元素

        在数据处理中,通常需要去除重复的元素。Set的唯一性特性使其非常适合这个任务。

  1. import java.util.Arrays;
  2. import java.util.HashSet;
  3. import java.util.List;
  4. import java.util.Set;
  5. public class RemoveDuplicates {
  6. public static void main(String[] args) {
  7. List<String> list = Arrays.asList("apple", "banana", "apple", "orange", "banana");
  8. Set<String> set = new HashSet<>(list);
  9. System.out.println("Unique elements: " + set);
  10. }
  11. }

        (2)查找集合的交集、并集和差集

        我们还可以使用Set可以方便地进行集合操作,如交集、并集和差集。

  1. import java.util.HashSet;
  2. import java.util.Set;
  3. public class SetOperations {
  4. public static void main(String[] args) {
  5. Set<String> set1 = new HashSet<>();
  6. set1.add("A");
  7. set1.add("B");
  8. set1.add("C");
  9. Set<String> set2 = new HashSet<>();
  10. set2.add("B");
  11. set2.add("C");
  12. set2.add("D");
  13. // 并集
  14. Set<String> union = new HashSet<>(set1);
  15. union.addAll(set2);
  16. System.out.println("Union: " + union);
  17. // 交集
  18. Set<String> intersection = new HashSet<>(set1);
  19. intersection.retainAll(set2);
  20. System.out.println("Intersection: " + intersection);
  21. // 差集
  22. Set<String> difference = new HashSet<>(set1);
  23. difference.removeAll(set2);
  24. System.out.println("Difference: " + difference);
  25. }
  26. }

        (3)判断两个集合是否相等

        我们可以使用Setequals方法来判断两个集合是否相等。两个集合相等的条件是它们包含的元素相同,顺序无关。

  1. import java.util.HashSet;
  2. import java.util.Set;
  3. public class SetEquality {
  4. public static void main(String[] args) {
  5. Set<Integer> set1 = new HashSet<>();
  6. set1.add(1);
  7. set1.add(2);
  8. set1.add(3);
  9. Set<Integer> set2 = new HashSet<>();
  10. set2.add(3);
  11. set2.add(2);
  12. set2.add(1);
  13. System.out.println("Are sets equal? " + set1.equals(set2));
  14. }
  15. }

        当然,Java中的Set还有其他的许多用处,这里作者只是简单的列举出几点,其他的作用读者可以在日常中对其进行探索。这样我们就使用Set的实际案例来帮助你进一步理解Java中的Set类。

5.总结

        在本文中,我们首先全面探讨了Java中的Set接口及其使用方法。Set是Java集合框架的重要组成部分,旨在存储唯一的元素。其主要特点包括元素的唯一性和无序性,使其在需要去重或处理集合操作时非常有用。

        接着我们详细介绍了Set接口中的常用API,如addclearcontainsiteratorremovesizeisEmptytoArraycontainsAlladdAll,并通过代码示例演示了这些方法的实际应用。        

        之后我们还讨论了HashSetLinkedHashSetTreeSet这几种常见的Set实现类,分析了它们的特点和适用场景。

        最后通过实际案例,我们展示了如何利用Set解决实际编程问题,如去除重复元素、进行集合操作和判断集合相等。通过对Set的深入理解和实际应用,我们能够在开发中更高效地处理集合数据,提升代码的性能和可维护性。


以上就是本篇文章的全部内容了~~~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/1012807
推荐阅读
相关标签
  

闽ICP备14008679号