JDK源码解析---StringBuilder

1.概述

​ StringBuilder和StringBuffer一样,都是继承自抽象类AbstractStringBuilder类,也是一个可变的字符序列。StringBuilder和StringBuffer非常相似,甚至有互相兼容的API,不过,StringBuilder不是线程安全的,这是和StringBuffer的主要区别。
​ StringBuilder类被设计成在不需要多线程安全的情况下替换StringBuffer类的。如果程序中不需要多线程安全,推荐使用StringBuilder类,因为没有了同步的操作而速度上比较快。

2.类图

在这里插入图片描述

层次关系和StringBuffer相同,都是继承自AbstrcatStringBuilder,并且实现或间接实现了三个借口。

3.属性

将比较与StringBuffer,少了一个toString缓冲区,其他一致

4.构造方法

  1. StringBuilder()默认的构造方法

    同StringBuffer 都是调用父类的构造方法,初始容量同为16

  2. StringBuilder(int capacity) 给定容量的构造方法

    同StringBuffer 给定参数 调用父类的构造方法,根据参数指定容量。

  3. StringBuilder(String str)给定初始值的构造方法

    调用父类的构造方法,得到一个容量为str长度+16空间的StringBuilder,然后将字符串str添加其中。

  4. StringBuilder(CharSequence seq)

    调用父类的构造方法,得到一个容量为seq长度+16空间的StringBuilder,然后将字符序列seq添加其中。

5.append方法

重写父类的方法,父类的具体实现可以参考博客JDK源码解析—AbstractStringBuilder

		public StringBuilder append(Object obj) {//将obj转字符串追加到末尾
        return append(String.valueOf(obj));
    }
		public StringBuilder append(String str) {//追加str
        super.append(str);
        return this;
    }	
		public StringBuilder append(StringBuffer sb) {//sb+sb
        super.append(sb);
        return this;
    }
    public StringBuilder append(CharSequence s) {//追加字符序列
        super.append(s);
        return this;
    }
		public StringBuilder append(CharSequence s, int start, int end) {//将字符序列从start开始到end-1的位置的字符添加到末尾
        super.append(s, start, end);
        return this;
    }
    public StringBuilder append(char[] str) {//添加字符数组
        super.append(str);
        return this;
    }
    public StringBuilder append(char[] str, int offset, int len) {//将字符数组offset的位置开始 长度为len的部分的字符添加到末尾
        super.append(str, offset, len);
        return this;
    }
		// 下面是添加数据基本类型
    public StringBuilder append(boolean b) {//添加boolean 相当于添加一个字符串"true" or "false"
        super.append(b);
        return this;
    }
    public StringBuilder append(char c) {
        super.append(c);
        return this;
    }
    public StringBuilder append(int i) {
        super.append(i);
        return this;
    }
    public StringBuilder append(long lng) {
        super.append(lng);
        return this;
    }
    public StringBuilder append(float f) {
        super.append(f);
        return this;
    }
    public StringBuilder append(double d) {
        super.append(d);
        return this;
    }

6.删除

  1. delete(int start, int end)

    删除从start位置开始到end-1的字符

  2. deleteCharAt(int index)

    删除指定位置的字符

7.替换

replace(int start, int end, String str)

将start开始到end-1位置的字符串替换成str

8.insert方法

insert方法也有很多,具体都是传入的参数不同
父类的具体实现可以参考博客JDK源码解析—AbstractStringBuilder

		public StringBuilder insert(int index, char[] str, int offset,
                                int len)
    {//在index的位置 插入str字符数组中 从offset位置开始len长度的字符串
        super.insert(index, str, offset, len);
        return this;
    }
    public StringBuilder insert(int offset, Object obj) {
            super.insert(offset, obj);
            return this;
    }
    @Override
    public StringBuilder insert(int offset, String str) {
        super.insert(offset, str);
        return this;
    }
    @Override
    public StringBuilder insert(int offset, char[] str) {
        super.insert(offset, str);
        return this;
    }
    public StringBuilder insert(int dstOffset, CharSequence s) {
            super.insert(dstOffset, s);
            return this;
    }
    public StringBuilder insert(int dstOffset, CharSequence s,
                                int start, int end)
    {//从dstOffset位置开始 插入字符序列s中 start到end-1的字符串
        super.insert(dstOffset, s, start, end);
        return this;
    }
		// 下面是在指定位置插入基本数据类型
    public StringBuilder insert(int offset, boolean b) {
        super.insert(offset, b);
        return this;
    }
    public StringBuilder insert(int offset, char c) {
        super.insert(offset, c);
        return this;
    }
    public StringBuilder insert(int offset, int i) {
        super.insert(offset, i);
        return this;
    }
    public StringBuilder insert(int offset, long l) {
        super.insert(offset, l);
        return this;
    }
    public StringBuilder insert(int offset, float f) {
        super.insert(offset, f);
        return this;
    }
    public StringBuilder insert(int offset, double d) {
        super.insert(offset, d);
        return this;
    }

9.匹配

  1. int indexOf(String str) 从头开始寻找 返回匹配字符串str的首位下标
  2. int indexOf(String str, int fromIndex),从fromIndex位置开始寻找 返回匹配字符串str的首位下标
  3. int lastIndexOf(String str)从后开始寻找,返回匹配字符串str的首位下标
  4. lastIndexOf(String str, int fromIndex) 从fromIndex位置开始寻找,返回匹配字符串str的首位下标

10.翻转

StringBuilder reverse() 颠倒字符串

猜你喜欢

转载自blog.csdn.net/gongsenlin341/article/details/107505832