Java集合框架Set接口

简介: Java集合框架中的Set接口是一种不允许包含重复元素的集合。Set接口继承自Collection接口,因此它具有Collection接口定义的所有方法。同时,Set接口还具有自己的特殊方法,例如:添加元素、删除元素、判断元素是否存在等。Set接口的实现类包括HashSet、LinkedHashSet和TreeSet。HashSet是基于哈希表实现的Set集合,它不保证集合中元素的顺序。由于哈希表的实现机制,HashSet的添加、删除和查找操作都具有很好的性能,时间复杂度为O(1)。LinkedHashSet是基于链表和哈希表实现的Set集合,它保证集合中元素的插入顺序。在插入元素时,它

Set接口概念

Java集合框架中的Set接口是一种不允许包含重复元素的集合。Set接口继承自Collection接口,因此它具有Collection接口定义的所有方法。同时,Set接口还具有自己的特殊方法,例如:添加元素、删除元素、判断元素是否存在等。

Set接口的实现类包括HashSet、LinkedHashSet和TreeSet。

HashSet是基于哈希表实现的Set集合,它不保证集合中元素的顺序。由于哈希表的实现机制,HashSet的添加、删除和查找操作都具有很好的性能,时间复杂度为O(1)。

LinkedHashSet是基于链表和哈希表实现的Set集合,它保证集合中元素的插入顺序。在插入元素时,它既会将元素插入到链表的末尾,又会将元素的哈希值和引用存储到哈希表中。因此,LinkedHashSet在性能上稍逊于HashSet,但在维护元素插入顺序方面具有优势。

TreeSet是基于红黑树实现的Set集合,它可以保证集合中元素的有序性。红黑树的实现机制使得TreeSet的插入、删除和查找操作的时间复杂度为O(logN),因此在处理大量数据时,TreeSet具有更好的性能。

Set接口常用的方法

add(E e):将指定元素添加到集合中,如果元素已经存在则不会添加。

remove(Object o):从集合中移除指定元素,如果集合中不包含该元素,则返回false。

contains(Object o):判断集合中是否包含指定元素,如果包含则返回true,否则返回false。

size():返回集合中元素的个数。

isEmpty():判断集合是否为空,如果集合中没有元素则返回true,否则返回false。

clear():清空集合中的所有元素。

iterator():返回一个迭代器,可以用于遍历集合中的元素。

toArray():返回一个包含集合中所有元素的数组。

addAll(Collection<? extends E> c):将指定集合中的所有元素添加到当前集合中。

retainAll(Collection<?> c):保留当前集合和指定集合中的公共元素,移除其他元素。

removeAll(Collection<?> c):移除当前集合中和指定集合中的公共元素。

示例

import java.util.HashSet;
import java.util.Set;
public class SetExample {
    public static void main(String[] args) {
        // 创建一个HashSet集合
        Set<String> set = new HashSet<>();
        // 向集合中添加元素
        set.add("apple");
        set.add("banana");
        set.add("orange");
        set.add("pear");
        // 输出集合大小
        System.out.println("集合大小:" + set.size());
        // 遍历集合
        for (String fruit : set) {
            System.out.println(fruit);
        }
        // 删除一个元素
        set.remove("banana");
        // 判断集合中是否包含指定元素
        System.out.println("集合中是否包含pear:" + set.contains("pear"));
        // 清空集合
        set.clear();
        // 判断集合是否为空
        System.out.println("集合是否为空:" + set.isEmpty());
    }
}
目录
相关文章
|
14天前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
|
5天前
|
Java
在Java中,接口之间可以继承吗?
接口继承是一种重要的机制,它允许一个接口从另一个或多个接口继承方法和常量。
22 1
|
14天前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
25 2
|
14天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
15天前
|
Java
java线程接口
Thread的构造方法创建对象的时候传入了Runnable接口的对象 ,Runnable接口对象重写run方法相当于指定线程任务,创建线程的时候绑定了该线程对象要干的任务。 Runnable的对象称之为:线程任务对象 不是线程对象 必须要交给Thread线程对象。 通过Thread的构造方法, 就可以把任务对象Runnable,绑定到Thread对象中, 将来执行start方法,就会自动执行Runable实现类对象中的run里面的内容。
31 1
|
19天前
|
存储 Java 开发者
在 Java 中,如何遍历一个 Set 集合?
【10月更文挑战第30天】开发者可以根据具体的需求和代码风格选择合适的遍历方式。增强for循环简洁直观,适用于大多数简单的遍历场景;迭代器则更加灵活,可在遍历过程中进行更多复杂的操作;而Lambda表达式和`forEach`方法则提供了一种更简洁的函数式编程风格的遍历方式。
|
18天前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
18 0
|
1月前
|
存储 JavaScript 前端开发
Set、Map、WeakSet 和 WeakMap 的区别
在 JavaScript 中,Set 和 Map 用于存储唯一值和键值对,支持多种操作方法,如添加、删除和检查元素。WeakSet 和 WeakMap 则存储弱引用的对象,有助于防止内存泄漏,适合特定场景使用。
|
2月前
|
存储 Java API
【数据结构】map&set详解
本文详细介绍了Java集合框架中的Set系列和Map系列集合。Set系列包括HashSet(哈希表实现,无序且元素唯一)、LinkedHashSet(保持插入顺序的HashSet)、TreeSet(红黑树实现,自动排序)。Map系列为双列集合,键值一一对应,键不可重复,值可重复。文章还介绍了HashMap、LinkedHashMap、TreeMap的具体实现与应用场景,并提供了面试题示例,如随机链表复制、宝石与石头、前K个高频单词等问题的解决方案。
40 6
【数据结构】map&set详解
|
1月前
|
存储 缓存 Java
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
38 1
下一篇
无影云桌面