除了 Set
接口提供的方法外,Java 中还提供了三种常见的 Set
实现类,分别是 HashSet
、LinkedHashSet
和 TreeSet
。
HashSet
HashSet
是基于哈希表实现的集合,它不保证元素的顺序。HashSet
通过将元素的 hashCode()
值映射到一个数组索引来快速查找元素,因此在添加元素时需要重写元素的 hashCode()
和 equals()
方法,以保证元素的唯一性。
下面是一个 HashSet
的示例:
javaCopy codeimport java.util.HashSet;
import java.util.Set;
public class HashSetExample {
public static void main(String[] args) {
// 创建一个 HashSet 对象
Set<Integer> set = new HashSet<Integer>();
// 添加元素
set.add(5);
set.add(2);
set.add(8);
set.add(1);
// 输出元素个数
System.out.println("元素个数:" + set.size());
// 遍历元素
for (Integer num : set) {
System.out.println(num);
}
// 判断是否包含元素
System.out.println("是否包含 5:" + set.contains(5));
// 删除元素
set.remove(2);
// 清空集合
set.clear();
}
}
在上面的代码中,首先创建了一个 HashSet
对象,然后使用 add()
方法添加元素,由于 HashSet
是无序的,所以输出的结果是不确定的。使用 contains()
方法可以判断集合中是否包含指定的元素,使用 remove()
方法可以删除元素,使用 clear()
方法可以清空集合。最后使用 for-each 循环遍历集合中的元素。
输出结果如下:
arduinoCopy code元素个数:4
1
2
5
8
是否包含 5:true
LinkedHashSet
LinkedHashSet
是基于哈希表和链表实现的集合,它保证元素的顺序与添加顺序一致。LinkedHashSet
在 HashSet
的基础上使用链表来维护元素的插入顺序,因此在添加元素时也需要重写元素的 hashCode()
和 equals()
方法,以保证元素的唯一性。
下面是一个 LinkedHashSet
的示例:
import java.util.LinkedHashSet;
import java.util.Set;
public class LinkedHashSetExample {
public static void main(String[] args) {
// 创建一个 LinkedHashSet 对象
Set<Integer> set = new LinkedHashSet<Integer>();
// 添加元素
set.add(5);
set.add(2);
set.add(8);
set.add(1);
// 输出元素个数
System.out.println("元素个数:" + set.size());
// 遍历元素
for (Integer num : set) {
System.out.println(num);
}
// 判断是否包含元素
System.out.println("是否包含 5:" + set.contains(5));
// 删除元素
set.remove(2);
// 清空集合
set.clear();
}
}
在上面的代码中,首先创建了一个 LinkedHashSet
对象,然后使用 add()
方法添加元素,由于 LinkedHashSet
保证元素的顺序与添加顺序一致,所以输出的结果是按照添加顺序排列的。使用 contains()
方法可以判断集合中是否包含指定的元素,使用 remove()
方法可以删除元素,使用 clear()
方法可以清空集合。最后使用 for-each 循环遍历集合中的元素。
输出结果如下:
元素个数:4
5
2
8
1
是否包含 5:true