HashSet 类是 Java 集合框架的一部分,提供快速、无序的集合,不允许重复元素。它构建在 HashMap 之上,这意味着它继承了相同的时间复杂度优势,但纯粹关注元素唯一性。在本文中,我们将探讨 HashSet 的工作原理、它的独特之处以及它与其他集合的不同之处。
哈希集是:
// Parameterized constructor with initial capacity SetsetWithInitialCapacity = new HashSet(5); // Parameterized constructor using a collection Set setWithCollection = new HashSet(Arrays.asList(4, 4, 3)); // Default constructor with default capacity 16 Set set = new HashSet();
set.add(1); set.add(2); set.add(1); // Duplicate value is ignored System.out.println(set); // Output -> [1, 2]
如果您需要替换重复值而不是忽略它们,HashSet 将不是正确的选择。这是因为它优先考虑元素的唯一性。
// Parameterized constructor with initial capacity SetsetWithInitialCapacity = new HashSet(5); System.out.println(setWithInitialCapacity.size()); // Output -> 0
尽管 setWithInitialCapacity 的容量为 5,但 size 为 0,因为 size 反映的是集合中存在的元素数量,而不是初始容量。您可以将容量视为内部存储空间,它会随着元素的添加而调整。
// Parameterized constructor using a collection SetsetWithCollection = new HashSet(Arrays.asList(4, 4, 3)); System.out.println(setWithCollection); // Output -> [3, 4] or [4, 3]
如果需要保留已排序的元素,请考虑使用TreeSet,它确保元素按升序排列。
在面试中,一个常见的问题是是否可以检索 HashSet 中元素的索引。答案是否,因为HashSet使用哈希机制来存储元素,而不是像列表或数组那样基于索引的结构。
由于HashSet由HashMap支持,因此它使用映射的键来存储元素,而值是不相关的。这就是为什么 HashSet 中的每个元素都必须是唯一的,就像 HashMap 中的键一样。
当您需要快速、无序的集合来避免重复时,HashSet 是一个强大的工具。虽然它为大多数操作提供了 O(1) 时间复杂度,但它缺乏排序和索引等功能。对于开发人员来说,了解 HashSet 与 HashMap 的关系有助于理解其内部工作原理并更好地利用集合框架。
在下一篇文章中,我们将探讨面试中常见的面试问题,以测试候选人对集合概念的了解。
Java 基础知识
Array面试要点
Java 内存基础知识
快乐编码!
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3