Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在使用StringBuilder的代码上运行pmd会给出有关初始化大小和附加大小的错误_Java_String_Stringbuilder_Pmd_Stringbuffer - Fatal编程技术网

Java 在使用StringBuilder的代码上运行pmd会给出有关初始化大小和附加大小的错误

Java 在使用StringBuilder的代码上运行pmd会给出有关初始化大小和附加大小的错误,java,string,stringbuilder,pmd,stringbuffer,Java,String,Stringbuilder,Pmd,Stringbuffer,字符数可能是错误的,因为我在发布之前更改了文字 谢谢当您使用默认容量创建一个StringBuilder时,如果您附加的容量超过该容量,则必须扩展其内部数组 如果您知道需要创建的最终字符串的长度,那么您可以创建一个具有该容量的StringBuilder,这样它就知道您需要这么多字符,并且它的内部数组不需要扩展。当您创建一个具有默认容量的StringBuilder时,如果追加的容量超过该容量,则必须扩展它的内部数组 如果您知道需要创建的最终字符串的长度,那么您可以创建一个具有该容量的StringBu

字符数可能是错误的,因为我在发布之前更改了文字


谢谢

当您使用默认容量创建一个
StringBuilder
时,如果您附加的容量超过该容量,则必须扩展其内部数组


如果您知道需要创建的最终字符串的长度,那么您可以创建一个具有该容量的
StringBuilder
,这样它就知道您需要这么多字符,并且它的内部数组不需要扩展。

当您创建一个具有默认容量的
StringBuilder
时,如果追加的容量超过该容量,则必须扩展它的内部数组


如果您知道需要创建的最终字符串的长度,那么您可以创建一个具有该容量的
StringBuilder
,这样它就知道您需要那么多字符,而且它的内部数组将不需要扩展。

StringBuilder
的构造函数可以选择接收具有要使用的内部缓冲区大小的int。如果没有给定值(如代码中所示),则默认值为16

当您在
StringBuilder
上追加数据时,它会根据需要自动调整内部缓冲区的大小。调整大小意味着创建一个新的、更大的数组,并将旧数据复制到该数组中。这是一个“昂贵”的操作(注意引号,这是一个微观优化,如果你使用的是像冒泡排序这样的糟糕算法,你会有更大的问题)

对字符串的预期大小进行更有根据的猜测可以避免/最小化这种重新分配

PMD不知道映射的内容是什么,但它知道它至少包含83个字符(假设映射不是空的)

这可以通过对尺寸进行更合理的猜测来解决,例如:

StringBuffer constructor is initialized with size 16, but has at least 83 characters appended.

如果您能够更好地接近贴图的键和值的预期值,则可以进一步细化此属性。通常,稍微超出实际预期输出会更好,因为即使这意味着分配更多内存,也有更好的机会完全避免重新分配。

StringBuilder的构造函数可以选择接收具有要使用的内部缓冲区大小的int。如果没有给定值(如代码中所示),则默认值为16

当您在
StringBuilder
上追加数据时,它会根据需要自动调整内部缓冲区的大小。调整大小意味着创建一个新的、更大的数组,并将旧数据复制到该数组中。这是一个“昂贵”的操作(注意引号,这是一个微观优化,如果你使用的是像冒泡排序这样的糟糕算法,你会有更大的问题)

对字符串的预期大小进行更有根据的猜测可以避免/最小化这种重新分配

PMD不知道映射的内容是什么,但它知道它至少包含83个字符(假设映射不是空的)

这可以通过对尺寸进行更合理的猜测来解决,例如:

StringBuffer constructor is initialized with size 16, but has at least 83 characters appended.
如果您能够更好地接近地图的键和值的预期值,则可以进一步细化这一点。通常,稍微超出实际预期输出会更好,因为即使这意味着分配更多内存,也有更好的机会完全避免重新分配

StringBuilder result = new StringBuilder(83 * data.size()); // 83 or whatever you constant strings account for