zoukankan      html  css  js  c++  java
  • StringBuffer的s1.capacity()是多少?

    定义有StringBuffer s1=new StringBuffer(10);s1.append(“1234”)则s1.length()和s1.capacity()分别是多少?

    StringBuffer s = new StringBuffer(x);  x为初始化容量长度
    s.append("Y"); "Y"表示长度为y的字符串
    length始终返回当前长度即y;
    对于s.capacity():
    1.当y<x时,值为x
    以下情况,容器容量需要扩展
    2.当x<y<2*x+2时,值为 2*x+2
    3.当y>2*x+2时,值为y

    1.length 返回当前长度
    2.如果字符串长度没有初始化长度大,capacity返回初始化的长度
    以上两点没有问题。

    对于第三点:3.如果append后的字符串长度超过初始化长度,capacity返回增长后的长度
    这个观点不够完整,我作一些小小的补充。
    首先,我们先看源码。我们看StringBuffer 的 append的操作后,对capacity的影响是怎样的



    首先,我们可以看到,如果append后的字符串长度超过初始化长度,它会先将初始化的容量翻倍再+2.
    如图:  int newCapacity = value.length * 2 + 2 ;
    在初始化容量增长过一次之后,仍然不够用的话,就会用 append后的字符串长度作为新的容量。
  • 相关阅读:
    CF 142B Tprimes
    CF 231A Team
    poj 2001 Shortest Prefixes ——字典树入门
    hdu 1039 Easier Done Than Said?
    poj 2528 Mayor's posters
    hdu 1061 Rightmost Digit
    poj 2503 Babelfish
    CF271 A. Beautiful Year
    poj 2752
    CF271 B. Prime Matrix
  • 原文地址:https://www.cnblogs.com/zhuyeshen/p/11017251.html
Copyright © 2011-2022 走看看