如何通过StringBuilder的capacity()和ensureCapacity()方法避免超长文本拼接时的重复扩容问题?

2026-05-07 20:440阅读0评论SEO资讯
  • 内容介绍
  • 相关推荐

本文共计702个文字,预计阅读时间需要3分钟。

如何通过StringBuilder的capacity()和ensureCapacity()方法避免超长文本拼接时的重复扩容问题?

StringBuilder在拼接大量文本时,内部字符数组会动态扩容。频繁的扩容(尤其是小步增长)会导致多次数组复制,显著降低性能。合理使用capacity()和ensureCapacity(int)可以提前预留足够空间,避免重复分配与复制。

理解 capacity() 的实际含义

capacity() 返回的是当前内部数组的总长度(不是字符串长度 length()),即还能容纳多少个额外字符而不触发扩容。例如:

StringBuilder sb = new StringBuilder("abc"); // length=3, capacity=16(默认初始容量) sb.ensureCapacity(100); // 扩容后 capacity ≥ 100,比如变成 100 或 112 System.out.println(sb.capacity()); // 输出 ≥100 的值

注意:JDK 实现中扩容策略通常是「当前 capacity × 2 + 2」,但具体数值不需强记,关键是通过 capacity() 观察当前余量,辅助判断是否需要预分配。

阅读全文

本文共计702个文字,预计阅读时间需要3分钟。

如何通过StringBuilder的capacity()和ensureCapacity()方法避免超长文本拼接时的重复扩容问题?

StringBuilder在拼接大量文本时,内部字符数组会动态扩容。频繁的扩容(尤其是小步增长)会导致多次数组复制,显著降低性能。合理使用capacity()和ensureCapacity(int)可以提前预留足够空间,避免重复分配与复制。

理解 capacity() 的实际含义

capacity() 返回的是当前内部数组的总长度(不是字符串长度 length()),即还能容纳多少个额外字符而不触发扩容。例如:

StringBuilder sb = new StringBuilder("abc"); // length=3, capacity=16(默认初始容量) sb.ensureCapacity(100); // 扩容后 capacity ≥ 100,比如变成 100 或 112 System.out.println(sb.capacity()); // 输出 ≥100 的值

注意:JDK 实现中扩容策略通常是「当前 capacity × 2 + 2」,但具体数值不需强记,关键是通过 capacity() 观察当前余量,辅助判断是否需要预分配。

阅读全文