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

C#中StringBuilder通过索引访问字符的时间复杂度问询

StringBuilder 索引访问的时间复杂度解析

好问题!先给你拍板结论:你代码里写的char ch = builder[i];(注:Java 中 StringBuilder 并不支持用[]直接访问元素,实际需要调用charAt(i)方法,这里应该是笔误),这个字符访问操作的时间复杂度是O(1)(常数时间),完全不是线性时间O(i)。

为什么是常数时间?核心原因在于 StringBuilder 的底层实现:

  • Java 中的StringBuilder内部是靠一个**char[]数组**来存储所有字符的,和普通数组的存储逻辑一模一样。
  • 当你通过索引获取字符时,JVM 可以直接通过数组的内存地址偏移计算出目标字符的精确位置,一步就能拿到对应的值,根本不需要从第一个字符开始逐个遍历到第i个位置。

举个对比例子帮你理解:如果是链表结构的字符串实现(比如某些自定义的链表式字符串类),访问第i个元素才需要从头遍历前i个节点,时间复杂度是O(i)。但 StringBuilder 用的是动态数组,哪怕有自动扩容的逻辑,也只会在容量不足时触发,单个索引访问的操作和普通数组一样,都是常数时间级别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:13:59