Java中的StringBuilder初始化
我需要使用,在查看源代码后,我注意到一个我不熟悉的Java中的StringBuilder初始化,java,bit-manipulation,stringbuilder,Java,Bit Manipulation,Stringbuilder,我需要使用,在查看源代码后,我注意到一个我不熟悉的StringBuilder初始化(我总是使用StringBuilder中的无参数构造函数,即new StringBuilder()) 在方法中: StringBuilder sb = new StringBuilder(items.size() << 3); StringBuilder sb=新的StringBuilder(items.size()XBitshift乘以3意味着乘以2^3,即8。作者必须假设每个项目在生成的字符串中最
StringBuilder
初始化(我总是使用StringBuilder
中的无参数构造函数,即new StringBuilder()
)
在方法中:
StringBuilder sb = new StringBuilder(items.size() << 3);
StringBuilder sb=新的StringBuilder(items.size()XBitshift乘以3意味着乘以2^3,即8。作者必须假设每个项目在生成的字符串中最多包含8个字符。因此,她或他使用该容量初始化了StringBuilder
,使其高效运行。如果假设正确StringBuilder
将不会重新分配内部数据结构。是一种乘以8items.size()的模式。
我认为程序员只是猜测初始化容量以防止(或减少到最小值)StringBuilder()
内部缓冲区重新分配。
“您不应该关心您正在使用的类的实现细节”真的吗?这是一个笑话吗?可靠;封装。如果您根据关于类X内部工作的特定知识编写代码,则在修改类X后,代码很可能无法正常工作。查看著名库的实现细节也可以帮助您提高编码技能,但这并不意味着sn并不意味着实现细节不会改变。例如,看看JRE 7中的String类,编写代码时,不管实现如何,它都能工作(这是一件好事)与不关心实现不同。您应该关心并避免使用工作正常但与当前/通用实现交互不好的代码。
/** Creates a backslash escaped string, joining all the items. */
public static String join(List<?> items, char separator) {
StringBuilder sb = new StringBuilder(items.size() << 3);
boolean first=true;
for (Object o : items) {
String item = o.toString();
if (first) {
first = false;
} else {
sb.append(separator);
}
for (int i=0; i<item.length(); i++) {
char ch = item.charAt(i);
if (ch=='\\' || ch == separator) {
sb.append('\\');
}
sb.append(ch);
}
}
return sb.toString();
}