You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将HashSet转换为ArrayList时的空间复杂度疑问

关于HashSet转ArrayList的内存问题解答
  • 结论:使用new ArrayList<>(hashSet)转换时,会单独复制HashSet中的n个元素,不会包装HashSet的底层数组,会产生额外内存开销。
  • 原因:
    1. HashSet底层依赖HashMap实现,元素存储在HashMap的key中;而ArrayList底层是独立的Object数组,两者存储结构完全不同,不可能直接共享底层数组。
    2. 调用这个构造器时,会先通过hashSet.toArray()把元素转成临时数组,再将数组里的元素引用复制到ArrayList自己的底层数组中——这里复制的是对象引用,对象本身不会被复制,但确实会额外分配存储这些引用的内存空间。
  • 结合LeetCode场景提醒:
    像《Find All Duplicates in an Array》这类要求O(1)额外空间(忽略返回集合)的题目,用HashSet再转ArrayList的方式不符合要求——因为HashSet本身就占用了O(n)的空间,加上转换时的复制,整体空间复杂度是O(n)。这类题目应该用原地修改数组的思路,比如利用元素的正负值标记重复项,避免额外空间开销。

内容的提问来源于stack exchange,提问作者DrinkandDerive

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 12:59:54