StringBuilder中的length()和capacity()方法之间的区别
我试图弄清楚何时使用或为什么capacity()
方法不同于length()
方法的StringBuilder
或StringBuffer
类。StringBuilder中的length()和capacity()方法之间的区别
我已经搜索堆栈溢出,并设法拿出this的答案,但我不明白它与length()
方法的区别。我也访问过this网站,但这对我来说帮助更少。
StringBuilder
是建立文本。在内部,它使用一组字符来存放您添加到其中的文本。 capacity
是数组的大小。 length
是该数组中多少数据当前由应该使用的文本填充。因此,与:
StringBuilder sb = new StringBuilder(1000);
sb.append("testing");
capacity()
是1000(有空间用于1000个字符需要用较大的一个被替换的内部阵列之前),和length()
是7(有阵列在七个有意义字符)。
的能力是非常重要的,因为如果你尝试更多的文本添加到StringBuilder
比它有能力,它分配一个新的,更大的缓存和复制内容到它,它有内存使用和性能的影响*。例如,StringBuilder
的默认容量是目前16个字符(它不记录,并可以改变),所以:
StringBuilder sb = new StringBuilder();
sb.append("Singing:");
sb.append("I am the very model of a modern Major General");
...创建StringBuilder
与,副本"Singing:"
成数组,那么必须创建一个新的数组,并在它添加第二个字符串之前将内容复制到它,因为它没有足够的空间来添加第二个字符串。
* (无论是否重要取决于什么代码做)
字符串的长度总是小于或等于制造商的能力。长度为构建器中存储的字符串的实际大小,容量为最大大小,它目前可以适用。
如果添加更多字符以超过其容量,构建器的容量会自动增加。在内部,字符串构建器是一个字符数组,因此构建器的容量是数组的大小。如果超出构建器的容量,则该数组将被一个新数组替换。新的数组大小为2 * (the previous array size + 1)
。
既然你是新的Java的,我建议你这个技巧也有关的StringBuilder的效率:
您可以使用newStringBuilder(initialCapacity)
创建具有指定初始容量StringBuilder的。通过仔细选择初始容量,可以使您的程序更高效。如果容量始终大于构建器的实际长度,则JVM将永远不需要为构建器重新分配内存。另一方面,如果容量太大,则会浪费存储空间。您可以使用trimToSize()
方法将容量减小到实际大小。
我试图解释一下我能做到的最好的条件,所以我希望它有帮助。
'length()'是当前有多少东西在里面。 'cacacity()'是它目前有多少空间。 – khelwood