StringBuffer的容量是多少?
程序启动时是否需要设置容量的大小?如果没有设置,是否导致程序运行缓慢?
例如。超过1000个长度字符使用StringBuffer outputSource = new StringBuffer();
另一方面,设置相对准确的值应该会提高程序计算性能吗?
我希望我的问题很清楚。
谢谢高级!
答案 0 :(得分:4)
您应该使用更新的StringBuilder
课程。它本质上是相同的,但没有同步。
如果您事先知道大致的大小,那么分配具有足够容量的StringBuilder
会更有效。这样,它就不需要在操作期间自行调整大小。
请注意,除非您使用多个操作来创建长字符串,否则它不会真正影响性能。定义容量可能有用的情况是例如创建一个10,000个字符的字符串,一次附加10个字符。这将需要1000次追加调用,并且可能需要多次调整内部char[]
的大小。
但是,如果您要创建包含2个附加项的10,000个字符的字符串,则可能只会获得2个限制。这在性能方面不太可能出现问题。
答案 1 :(得分:1)
每个字符串缓冲区都有容量。只要长度了 字符串缓冲区中包含的字符序列不超过 容量,没有必要分配新的内部缓冲区数组。 如果内部缓冲区溢出,它会自动变大。如 发布JDK 5,这个类已经补充了等价物 设计用于单个线程的类,StringBuilder。该 通常应优先使用StringBuilder类 一,因为它支持所有相同的操作,但它更快,因为它 不执行同步。
一些重要的要点
如果溢出缓冲区的容量需要分配更多内存,这将对性能产生一些影响,具体取决于StringBuffer
的使用方式。
基本上StringBuffer
的容量与分配给您的程序的内存一样多。
如果您的多线程不使用StringBuilder
答案 2 :(得分:0)
StringBuffer
线程安全。所以当数据量很大时运行速度会变慢。而不是您的应用程序是单线程使用StringBuilder
。与StringBuffer
相比,它是快速访问。但StringBuilder
非线程安全。
答案 3 :(得分:0)
由于字符串是不可变的(无法更改),因此连接可能非常耗费时间和内存,因为每次连接时,旧版本加上需要追加的字符串都会被创建为新变量,旧的变量仍然存在在堆上...
StringBuilder包含一个内部缓冲区,因此只需要复制要附加的字符串。
如果StringBuilder空间不足,它会将其缓冲区加倍(在这种情况下需要复制整个字符串)。缓冲区加倍的原因并不只是扩展到与旧字符串大小相匹配的大小+附加的大小是在这种情况下,字符串总是必须再次复制。因此它加倍了。
也可以在StringBuilder的构造函数中提供最终的缓冲区大小,这只有在你已经知道将在StringBuilder中有多少时才有意义
希望这有帮助
答案 4 :(得分:0)
您应该更喜欢使用StringBuffer
类。
StringBuffer类是一个可变类,不像String类是不可变的。 StringBuffer类的容量和字符串。 StringBuffer可以动态更改。当涉及对字符串的大量修改(附加,插入,删除,修改等)时,首选字符串缓冲区。
StringBuffere类中有capacity()
和ensureCapacity()
等函数。
capacity() : Returns the current capacity of the String buffer.
ensureCapacity() : this method ensures minimum capacity of the String buffer.
您可以通过以下链接了解有关StringBuffer的简要信息:
答案 5 :(得分:-1)
任何stringbuffer都是可变的。任何在将其分配给内存后不再创建任何其他对象的方法。
因此,如果您相对定义任何大小的strignbuffer
,它不会影响性能