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
将不会重新分配内部数据结构。

是一种乘以8
items.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();
  }