Set 接口的实现类
- HashSet: 基于哈希表实现的集合,不保证元素的顺序。
- LinkedHashSet: 基于哈希表和双向链表实现的集合,保持元素插入顺序。
- TreeSet: 基于红黑树实现的有序集合,按照元素的自然排序或指定的比较器排序。
HashSet
HashSet
是 Java 集合框架中 Set 接口的一个实现类,它基于哈希表数据结构实现,用于存储一组不重复的元素。HashSet
主要用于快速查找和去重,它不保证元素的顺序,即不按照插入的顺序进行存储。
HashSet
是 Java 中常用的集合类,适用于需要快速查找和去重的场景。由于其基于哈希表的实现,查找元素的效率非常高,但它不保证元素的顺序。如果需要保持插入顺序或对元素进行排序,考虑使用 LinkedHashSet 或 TreeSet
。HashSet
适用于需要快速查找和去重的无序集合场景。
优点:
- 去重: HashSet 中不允许重复的元素,因此可以用于去除集合中重复的元素,确保集合中的元素是唯一的。
- 快速查找: HashSet 基于哈希表实现,查找元素的时间复杂度是 O(1),这使得在大型数据集中快速查找某个元素成为可能。
基础用法:
-
创建 HashSet 对象
使用无参构造函数可以创建一个空的 HashSet 对象,并使用 add() 方法向集合中添加元素。HashSet<String> set = new HashSet<>(); set.add("AA"); set.add("BB"); set.add("CC");
-
遍历 HashSet
HashSet 不支持通过索引访问元素,因为它是无序的,所以一般使用迭代器或增强型 for 循环遍历集合中的所有元素。for (String fruit : set) { System.out.println(fruit); }
-
删除元素
使用 remove() 方法可以从集合中删除指定的元素。set.remove("CC"); // 删除元素 "CC"
-
获取元素个数
使用 size() 方法可以获取集合中元素的个数。int size = set.size(); // 获取集合中元素的个数
-
清空集合
使用 clear() 方法可以清空集合中的所有元素。set.clear(); // 清空集合中的所有元素
LinkedHashSet
LinkedHashSet
是 Java 集合框架中 Set
接口的一个实现类,它是 HashSet 的一个子类。LinkedHashSet
同样用于存储一组不重复的元素,但与 HashSet
不同的是,它保持元素的插入顺序,即按照元素插入的顺序进行存储。LinkedHashSet
通过使用链表和哈希表结合的方式来实现这一特性。
由于其使用链表和哈希表结合的方式,既可以保持元素的插入顺序,又可以在 O(1) 的时间复杂度内进行元素的查找和去重操作。如果需要在集合中保持插入顺序并且不允许重复元素,LinkedHashSet
将是一个很好的选择。
优点:
- 去重: LinkedHashSet 中不允许重复的元素,因此可以用于去除集合中重复的元素,确保集合中的元素是唯一的。
- 保持插入顺序: LinkedHashSet 会保持元素的插入顺序,即按照元素插入的顺序进行存储,这使得在迭代时可以按照插入顺序访问元素。
基础用法:
-
创建 LinkedHashSet 对象
使用无参构造函数可以创建一个空的 LinkedHashSet 对象,并使用 add() 方法向集合中添加元素。LinkedHashSet<String> linkedHashSet = new LinkedHashSet<>(); linkedHashSet.add("AA"); linkedHashSet.add("BB"); linkedHashSet.add("CC");
-
遍历 LinkedHashSet
LinkedHashSet 会保持元素的插入顺序,因此可以使用迭代器或增强型 for 循环按照插入顺序遍历集合中的所有元素。for (String fruit : linkedHashSet) { System.out.println(fruit); }
-
删除元素
使用 remove() 方法可以从集合中删除指定的元素。linkedHashSet.remove("CC"); // 删除元素 "CC"
-
获取元素个数
使用 size() 方法可以获取集合中元素的个数。int size = linkedHashSet.size(); // 获取集合中元素的个数
-
清空集合
使用 clear() 方法可以清空集合中的所有元素。linkedHashSet.clear(); // 清空集合中的所有元素
TreeSet
TreeSet
是 Java 集合框架中 Set 接口的一个实现类,它使用红黑树来存储元素。TreeSet
中的元素是有序的,并且不允许重复元素。根据元素的自然顺序或指定的比较器,TreeSet
可以对元素进行自动排序。
TreeSet
是 Java 中常用的集合类,适用于需要排序、去重以及快速查找的场景。它适用于元素需要按照自然顺序或者自定义规则排序的情况。记住,使用 TreeSet
需要确保元素类实现了 Comparable
接口,或者通过比较器进行定制排序,以确保元素可以正确地排序存储。由于红黑树的结构,TreeSet
在查找元素时效率非常高。
优点:
- 排序: TreeSet 会根据元素的自然顺序或指定的比较器对元素进行排序,因此它可以用于按照一定规则对元素进行排序存储。
- 去重: TreeSet 中不允许重复的元素,因此可以用于去除集合中重复的元素,确保集合中的元素是唯一的。
- 快速查找: 红黑树的结构使得查找元素的时间复杂度为 O(log n),在大型数据集中快速查找某个元素成为可能。
基础用法:
-
创建 TreeSet 对象
使用无参构造函数可以创建一个空的 TreeSet 对象,并使用 add() 方法向集合中添加元素。TreeSet<String> treeSet = new TreeSet<>(); treeSet.add("AA"); treeSet.add("BB"); treeSet.add("CC");
-
自然排序和定制排序
TreeSet 可以使用元素的自然顺序(如果元素类实现了 Comparable 接口)或者通过自定义的比较器来进行排序。// 自然排序:元素类实现 Comparable 接口,并定义 compareTo 方法 TreeSet<Integer> naturalTreeSet = new TreeSet<>(); naturalTreeSet.add(5); naturalTreeSet.add(2); naturalTreeSet.add(8); // 结果:[2, 5, 8] // 定制排序:使用自定义的比较器 Comparator TreeSet<Integer> customTreeSet = new TreeSet<>((a, b) -> b - a); // 降序排序 customTreeSet.add(5); customTreeSet.add(2); customTreeSet.add(8); // 结果:[8, 5, 2]
-
遍历 TreeSet
TreeSet 中的元素是有序的,可以使用迭代器或增强型 for 循环按顺序遍历集合中的所有元素。for (String fruit : treeSet) { System.out.println(fruit); }
-
删除元素
使用 remove() 方法可以从集合中删除指定的元素。treeSet.remove("CC"); // 删除元素 "CC"
-
获取元素个数
使用 size() 方法可以获取集合中元素的个数。int size = treeSet.size(); // 获取集合中元素的个数
-
清空集合
使用 clear() 方法可以清空集合中的所有元素。treeSet.clear(); // 清空集合中的所有元素