Java中Set集合有哪些

Set是Java中的一种集合类型,它是基于集合理论中的数学概念而构建的。Set集合中的元素是唯一的,不允许重复。Java提供了多种Set的实现类,每个实现类都有其特定的用途和性能特点。本文将介绍Java中常见的几种Set集合类,并提供相应的代码示例。

HashSet

HashSet是Java集合框架中Set接口的一个常见实现类。它使用哈希表作为底层数据结构,可以实现快速的插入、删除和查找操作。HashSet不保证元素的顺序,即元素的插入和输出顺序可能不一致。

以下是HashSet的代码示例:

import java.util.HashSet;
import java.util.Set;

public class HashSetExample {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("apple");
        set.add("banana");
        set.add("orange");
        
        System.out.println(set); // 输出: [apple, banana, orange]
        
        set.remove("banana");
        System.out.println(set); // 输出: [apple, orange]
        
        System.out.println(set.contains("apple")); // 输出: true
        System.out.println(set.contains("banana")); // 输出: false
        
        set.clear();
        System.out.println(set); // 输出: []
    }
}

TreeSet

TreeSet是Java集合框架中SortedSet接口的一个实现类,它使用红黑树作为底层数据结构,可以实现有序的插入、删除和查找操作。TreeSet默认按照元素的自然顺序进行排序,或者可以通过实现Comparable接口来自定义排序规则。

以下是TreeSet的代码示例:

import java.util.Set;
import java.util.TreeSet;

public class TreeSetExample {
    public static void main(String[] args) {
        Set<Integer> set = new TreeSet<>();
        set.add(3);
        set.add(1);
        set.add(2);
        
        System.out.println(set); // 输出: [1, 2, 3]
        
        set.remove(2);
        System.out.println(set); // 输出: [1, 3]
        
        System.out.println(set.contains(1)); // 输出: true
        System.out.println(set.contains(2)); // 输出: false
        
        set.clear();
        System.out.println(set); // 输出: []
    }
}

LinkedHashSet

LinkedHashSet是HashSet的一个子类,它使用哈希表和双向链表来保持元素的插入顺序。LinkedHashSet在使用迭代器遍历时,输出的元素顺序与插入顺序一致。

以下是LinkedHashSet的代码示例:

import java.util.LinkedHashSet;
import java.util.Set;

public class LinkedHashSetExample {
    public static void main(String[] args) {
        Set<String> set = new LinkedHashSet<>();
        set.add("apple");
        set.add("banana");
        set.add("orange");
        
        System.out.println(set); // 输出: [apple, banana, orange]
        
        set.remove("banana");
        System.out.println(set); // 输出: [apple, orange]
        
        System.out.println(set.contains("apple")); // 输出: true
        System.out.println(set.contains("banana")); // 输出: false
        
        set.clear();
        System.out.println(set); // 输出: []
    }
}

总结

Java中提供了多种Set集合的实现类,每个实现类都有其特定的用途和性能特点。HashSet使用哈希表实现,可以实现快速的插入、删除和查找操作;TreeSet使用红黑树实现,可以实现有序的插入、删除和查找操作;LinkedHashSet使用哈希表和双向链表保持插入顺序。根据实际需求选择合适的Set实现类,可以提高代码的性能和可读性。


参考资料:

  • [Java HashSet](
  • [Java TreeSet](
  • [Java LinkedHashSet](

"代码示例参考自《Java核心技术》一书第10章"