280、Java基础56 - 数字与字符串【StringBuffer】 2019.11.23

1、StringBuffer

StringBuffer是可变长的字符串在这里插入图片描述

2、追加 删除 插入 反转

append 追加
delete 删除
insert 插入
reverse 反转

package character;
  
public class TestString {
  
    public static void main(String[] args) {
        String str1 = "let there ";
 
        StringBuffer sb = new StringBuffer(str1); //根据str1创建一个StringBuffer对象
        sb.append("be light"); //在最后追加
         
        System.out.println(sb);
         
        sb.delete(4, 10);//删除4-10之间的字符,[4,10)

        System.out.println(sb);
         
        sb.insert(4, "there ");//在4这个位置插入 there
         
        System.out.println(sb);
         
        sb.reverse(); //反转
         
        System.out.println(sb);
 
    }
  
}
  • 输出结果
    在这里插入图片描述

3、长度 容量

为什么StringBuffer可以变长?
和String内部是一个字符数组一样,StringBuffer也维护了一个字符数组。 但是,这个字符数组,留有冗余长度
比如说new StringBuffer(“the”),其内部的字符数组的长度,是19,而不是3,这样调用插入和追加,在现成的数组的基础上就可以完成了。
如果追加的长度超过了19,就会分配一个新的数组,长度比原来多一些,把原来的数据复制到新的数组中,看上去 数组长度就变长了 参考MyStringBuffer
length: “the”的长度 3
capacity: 分配的总空间 19

注: 19这个数量,不同的JDK数量是不一样的

package character;
  
public class TestString {
  
    public static void main(String[] args) {
        String str1 = "the";
 
        StringBuffer sb = new StringBuffer(str1);
         
        System.out.println(sb.length()); //内容长度
         
        System.out.println(sb.capacity());//总空间
  
    }
  
}
  • 输出结果
    在这里插入图片描述

4、练习:StringBuffer性能

String与StringBuffer的性能区别?

生成10位长度的随机字符串
然后,先使用String的+,连接10000个随机字符串,计算消耗的时间
然后,再使用StringBuffer连接10000个随机字符串,计算消耗的时间

提示: 使用System.currentTimeMillis() 获取当前时间(毫秒)
在这里插入图片描述

package digit;
/**
 *  String与StringBuffer的性能区别?
 
    生成10位长度的随机字符串
    然后,先使用String的+,连接10000个随机字符串,计算消耗的时间
    然后,再使用StringBuffer连接10000个随机字符串,计算消耗的时间
     
    提示: 使用System.currentTimeMillis() 获取当前时间(毫秒)
 *  
 */
public class TestString {
    public static void main(String[] args) {
        //创建随机数、连接次数
        String s = randomString(10);
        int sum = 10000;            
         
        //测试String的连接速度
        String link = "";
        long start = System.currentTimeMillis();//计时开始
        for (int i = 0; i < sum; i++) {
            link += s;                          //连接
        }
        long end = System.currentTimeMillis();  //计时结束
        System.out.printf("使用String的+,连接%d个随机字符串,消耗了%d毫秒%n",sum,end-start);
         
        //测试StringBuffer的连接速度
        StringBuffer sb = new StringBuffer(s);
        start = System.currentTimeMillis();     //计时开始
        for (int i = 0; i < sum; i++) {
            sb.append(s);                       //连接
        }
        end = System.currentTimeMillis();       //计时结束
        System.out.printf("使用StringBuffer的+,连接%d个随机字符串,消耗了%d毫秒%n",sum,end-start);
    }
    //指定长度随机字符串
    private static String randomString(int i) {
        String link = "";
        for (int j = '0'; j <= '9'; j++) {
            link += (char)j;
        }
        for (int j = 'a'; j <= 'z'; j++) {
            link += (char)j;
        }
        for (int j = 'A'; j <= 'Z'; j++) {
            link += (char)j;
        }
        char[] cs = new char[i]; 
        for (int j = 0; j < cs.length; j++) {
            int index = (int) (Math.random()*link.length());
            cs[j] = link.charAt(index);
        }
        String result = new String(cs);
        return result;
    }
}
  • 输出结果
    在这里插入图片描述

5、参考链接

[01] How2j - 数字与字符串系列教材 (十)- 自己开发一个JAVA STRINGBUFFER

发布了309 篇原创文章 · 获赞 229 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/youyouwuxin1234/article/details/103214415