开发者社区> 问答> 正文

ArrayList基础数组成本

我最近正在从Java中读取ArrayList。根据我的理解,当ArrayList达到其容量时,它将调用其resize方法并创建一个新的基础数组,该数组的大小是原始数组的两倍。由于这种情况,这种插入方式可以视为O(n),但平均而言仍为O(1)。但是,我对将其增加到两倍大小的原因感到困惑。将其增加到原始容量的三倍会更好吗?


问题来源:stackoverflow

展开
收起
七天一失眠 2020-03-28 11:12:56 1828 0
2 条回答
写回答
取消 提交回答
  • 看具体的业务情况来确定呗

    2020-03-29 15:14:16
    赞同 展开评论 打赏
  • 做一个优秀的阿里云志愿者

    重要的是容量要增加一个常数。不管那个因素是多少:1.5等于3。摊销成本将为O(1)-恒定时间。尽管不同的因素导致不同的常数。

    如果您在考虑因素的情况下进行数学运算,则摊销时间成本为O(f /(f-1)),其中f是因素。如果加倍的时间成本为2,则三倍的时间成本为1.5。

    容量的增加很大程度导致调整大小操作减少,但浪费的空间更大。您必须找到一个平衡点:是否将执行时间减少了25%相当于将存储开销增加了50%?


    答案来源:stackoverflow

    2020-03-28 11:13:13
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载