在Java中,Set
是 Collection
接口的一个子接口,它是一个不包含重复元素的集合,且通常不保证维护元素的有序或迭代顺序。Set
接口主要用于确保集合中每个元素的唯一性。
Set接口的主要方法:
boolean add(E e)
:将指定的元素添加到此集合中(如果它尚未在集合中)。boolean remove(Object o)
:从集合中移除指定元素。int size()
:返回集合中的元素数量。boolean contains(Object o)
:检查集合是否包含指定元素。Iterator<E> iterator()
:返回此集合的迭代器。
Set接口的主要实现类:
- HashSet
- LinkedHashSet
- TreeSet :java中TreeSet的介绍与实现
1. HashSet
HashSet
是基于 HashMap
实现的,它不保证元素的顺序,特别是它不保证该顺序恒久不变。
代码示例:
import java.util.HashSet;
import java.util.Set;
public class HashSetExample {
public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
set.add(1); // 重复元素,不会被添加
System.out.println("HashSet: " + set); // 输出可能是:[1, 2, 3]
// 添加元素
set.add(4);
System.out.println("After adding 4: " + set); // 输出可能是:[1, 2, 3, 4]
// 移除元素
set.remove(2);
System.out.println("After removing 2: " + set); // 输出可能是:[1, 3, 4]
// 检查是否包含元素
boolean contains = set.contains(3);
System.out.println("Contains 3: " + contains); // 输出:true
}
}
2. LinkedHashSet
LinkedHashSet
是 HashSet
的一个子类,它维护元素的插入顺序,或者在构造时所指定的顺序。
代码示例:
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSetExample {
public static void main(String[] args) {
Set<Integer> set = new LinkedHashSet<>();
set.add(1);
set.add(2);
set.add(3);
set.add(1); // 重复元素,不会被添加
System.out.println("LinkedHashSet: " + set); // 输出:[1, 2, 3]
// 添加元素
set.add(4);
System.out.println("After adding 4: " + set); // 输出:[1, 2, 3, 4]
// 移除元素
set.remove(2);
System.out.println("After removing 2: " + set); // 输出:[1, 3, 4]
}
}
3. TreeSet
TreeSet
是基于 TreeMap
实现的,它可以确保元素处于排序状态,通常用于需要对元素进行排序的场合。
代码示例:
import java.util.TreeSet;
import java.util.Set;
public class TreeSetExample {
public static void main(String[] args) {
Set<Integer> set = new TreeSet<>();
set.add(1);
set.add(3);
set.add(2);
set.add(1); // 重复元素,不会被添加
System.out.println("TreeSet: " + set); // 输出:[1, 2, 3]
// 添加元素
set.add(4);
System.out.println("After adding 4: " + set); // 输出:[1, 2, 3, 4]
// 移除元素
set.remove(2);
System.out.println("After removing 2: " + set); // 输出:[1, 3, 4]
}
}
自定义排序请看:java中TreeSet的介绍与实现
总结
HashSet
提供快速查找,不保证元素顺序。LinkedHashSet
提供快速查找,且维护元素插入顺序。TreeSet
自动排序元素,适合需要有序数据的场合。