📜  java set 操作 (1)

📅  最后修改于: 2023-12-03 15:01:32.131000             🧑  作者: Mango

Java Set 操作介绍

Set 是 Java Collection framework 中的一种数据结构,可以存储不重复的对象。Java 中提供了多种 Set 实现,如 HashSet, TreeSet 和 LinkedHashSet 等,每种实现都有其独特的特点和适用场景。

HashSet

HashSet 是最常用的 Set 实现之一,底层通过 HashMap 实现。HashSet 中存储的元素是无序的,因为其内部是使用散列表(hash table)实现的。HashSet 具有 O(1) 的插入、删除和.contains() 操作的平均时间复杂度。

创建 HashSet
Set<String> hashSet = new HashSet<String>();
添加元素
hashSet.add("Hello");
hashSet.add("World");
删除元素
hashSet.remove("Hello");
判断元素是否存在
hashSet.contains("Hello");
TreeSet

TreeSet 是基于红黑树实现的,内部自动排好序。由于其元素时有序的,所以查找效率比 HashSet 要快,但插入和删除操作比 HashSet 要慢。TreeSet 也可以自定义排序方式。

创建 TreeSet

创建 TreeSet 及其方式和创建 HashSet 是一样的。

Set<String> treeSet = new TreeSet<String>();
添加元素
treeSet.add("Hello");
treeSet.add("World");
删除元素
treeSet.remove("Hello");
判断元素是否存在
treeSet.contains("Hello");
自定义排序方式
Set<Integer> descendingSet = new TreeSet<Integer>(new Comparator<Integer>() {
    public int compare(Integer o1, Integer o2) {
        return o2.compareTo(o1);
    }
});
LinkedHashSet

LinkedHashSet 是 HashedSet 的子类,具有插入的顺序性。内部使用 LinkedHashMap 维护元素的顺序,性能略低于 HashSet,但可以避免 HashSet 的元素无序问题。

创建 LinkedHashSet

创建 LinkedHashSet 及其方式和创建 HashSet 是一样的。

Set<String> linkedHashSet = new LinkedHashSet<String>();
添加元素
linkedHashSet.add("Hello");
linkedHashSet.add("World");
删除元素
linkedHashSet.remove("Hello");
判断元素是否存在
linkedHashSet.contains("Hello");
集合运算

Java 中的 Set 接口也提供了一些集合运算方法,如并集(union)、交集(intersection)、差集(difference)等。

并集
Set<Integer> set1 = new HashSet<Integer>(Arrays.asList(1, 2, 3));
Set<Integer> set2 = new HashSet<Integer>(Arrays.asList(2, 3, 4));
Set<Integer> union = new HashSet<Integer>(set1);
union.addAll(set2); // union = {1, 2, 3, 4}
交集
Set<Integer> set1 = new HashSet<Integer>(Arrays.asList(1, 2, 3));
Set<Integer> set2 = new HashSet<Integer>(Arrays.asList(2, 3, 4));
Set<Integer> intersection = new HashSet<Integer>(set1);
intersection.retainAll(set2); // intersection = {2, 3}
差集
Set<Integer> set1 = new HashSet<Integer>(Arrays.asList(1, 2, 3));
Set<Integer> set2 = new HashSet<Integer>(Arrays.asList(2, 3, 4));
Set<Integer> difference = new HashSet<Integer>(set1);
difference.removeAll(set2); // difference = {1}
总结

以上就是 Java Set 操作的介绍,涉及 HashSet、TreeSet 和 LinkedHashSet 的基本使用方法以及集合运算,需要根据具体的需求选择合适的 Set 实现。