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
相关产品推荐
相关产品推荐

