Java Set的API介绍及代码示例

什么是Set

在Java编程中,Set是一种用于存储不重复元素的集合。Set接口继承了Collection接口,它是一个无序的集合,不会存储重复元素。

Set的特点

  • Set中的元素是无序的,不会按照插入顺序存储。
  • Set不会存储重复的元素,如果尝试将重复元素添加到Set中,操作将被忽略。
  • Set可以包含null元素。

Set的实现类

Java提供了多个Set的实现类,常用的有HashSet、LinkedHashSet和TreeSet。

HashSet

HashSet基于哈希表实现,无序集合,它不保证集合的迭代顺序。

// 创建HashSet
Set<String> set = new HashSet<>();

// 添加元素
set.add("apple");
set.add("banana");
set.add("orange");

// 删除元素
set.remove("banana");

// 判断元素是否存在
boolean contains = set.contains("orange");

// 清空集合
set.clear();

// 获取集合大小
int size = set.size();

LinkedHashSet

LinkedHashSet基于哈希表和链表实现,它保留了元素插入的顺序。

// 创建LinkedHashSet
Set<String> set = new LinkedHashSet<>();

// 添加元素
set.add("apple");
set.add("banana");
set.add("orange");

// 删除元素
set.remove("banana");

// 判断元素是否存在
boolean contains = set.contains("orange");

// 清空集合
set.clear();

// 获取集合大小
int size = set.size();

TreeSet

TreeSet基于红黑树实现,它可以对元素进行排序。

// 创建TreeSet
Set<String> set = new TreeSet<>();

// 添加元素
set.add("apple");
set.add("banana");
set.add("orange");

// 删除元素
set.remove("banana");

// 判断元素是否存在
boolean contains = set.contains("orange");

// 清空集合
set.clear();

// 获取集合大小
int size = set.size();

Set的常用操作

添加元素

使用add方法向Set中添加元素,如果元素已存在则不会被添加。

Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("orange");

删除元素

使用remove方法从Set中删除指定元素。

Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("orange");
set.remove("banana");

判断元素是否存在

使用contains方法判断Set中是否包含指定元素。

Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("orange");
boolean contains = set.contains("orange");

清空集合

使用clear方法清空Set中的所有元素。

Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("orange");
set.clear();

获取集合大小

使用size方法获取Set中元素的个数。

Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("orange");
int size = set.size();

序列图

下面是一个使用Set进行元素添加和删除的序列图示例。

sequenceDiagram
    participant Client
    participant Set
    Client->>Set: add("apple")
    Set-->>Client: true
    Client->>Set: add("banana")
    Set-->>Client: true
    Client->>Set: add("orange")
    Set-->>Client: true
    Client->>Set: remove("banana")
    Set-->>Client: true

类图

下面是HashSet、LinkedHashSet和TreeSet的类图示例。

classDiagram
    class HashSet{
        -HashMap map
        +add(E e): boolean
        +remove(Object o): boolean
        +clear(): void
        +contains(Object o): boolean
        +size(): int
    }
    
    class LinkedHashSet{
        -LinkedHashMap map
        +add(E e): boolean
        +remove(Object o): boolean
        +clear(): void
        +contains(Object o): boolean
        +size(): int
    }
    
    class TreeSet{
        -NavigableMap map
        +add(E e): boolean
        +remove(Object o): boolean
        +clear(): void
        +contains(Object o): boolean
        +size(): int
    }