剖析JDK源码-AbstractStringBuilder-(7)

剖析JDK源码-AbstractStringBuilder-(7)

一、简述

  • 一个神秘的抽象类(在jdk API文档找不到的类)。
  • 通过工具查看,是StringBuffer和StringBuilder的直接父类;
    在这里插入图片描述
  • 在jdk1.5时编写的,而StringBuffer是在jdk1.0时编写的,乍看像是先有儿后有父的疑惑;其实不然,AbstractStringBuilder是在开发StringBuilder时,将两者的共性抽离出来的。
  • AbstractStringBuilder本身也是一个字符容器(字符串生成器),
  • 更方便开发者在编写自定义容器时可以直接继承AbstractStringBuilder。

二、类声明和属性

abstract class AbstractStringBuilder implements Appendable, CharSequence {
 
 char[] value;
 int count;
 private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
}
  • 被关键字abstract 修饰,说明是一个抽象类,不可以直接实例化对象,只能被继承。
  • 实现了Appendable类(可附加序列化和值)和CharSequence类(字符序列化)。
  • 有三个变量属性:字符数组和数量;定义最大字符数组的长度。
    如下定义数组就会报错:内存溢出
 String [] str = new String[Integer.MAX_VALUE];

三、构造方法

1、无参,子类在实例化对象时必会执行这一个方法,因为对于子类的序列化是必需的。

 AbstractStringBuilder() {
    }

2、创建具有指定容量的AbstractStringBuilder容器。

 AbstractStringBuilder(int capacity) {
        value = new char[capacity];
    }

在子类中,就是super本方法
在这里插入图片描述

四、内部方法

1、public int length();返回字符长度。
2、public int capacity();返回当前容器容量。
3、public void ensureCapacity(int minimumCapacity);改变容器容量,且只进行扩容。

//只对正整数
public void ensureCapacity(int minimumCapacity) {
        if (minimumCapacity > 0)
            ensureCapacityInternal(minimumCapacity);
    }
 //只对大于当前容量值的数值   
 private void ensureCapacityInternal(int minimumCapacity) {
        // overflow-conscious code
        if (minimumCapacity - value.length > 0) {
            value = Arrays.copyOf(value,
                    newCapacity(minimumCapacity));
        }
    }
    
  private int newCapacity(int minCapacity) {
        // overflow-conscious code
        int newCapacity = (value.length << 1) + 2;
        if (newCapacity - minCapacity < 0) {
            newCapacity = minCapacity;
        }
        return (newCapacity <= 0 || MAX_ARRAY_SIZE - newCapacity < 0)
            ? hugeCapacity(minCapacity)
            : newCapacity;
    }
 private int hugeCapacity(int minCapacity) {
        if (Integer.MAX_VALUE - minCapacity < 0) { // overflow
            throw new OutOfMemoryError();
        }
        return (minCapacity > MAX_ARRAY_SIZE)
            ? minCapacity : MAX_ARRAY_SIZE;
    }

4、public void trimToSize() ;尝试减少字符序列化的空间。
5、public void setLength(int newLength);设置字符序列的长度。
6、public char charAt(int index);返回指定索引处的字符。
7、public int codePointAt(int index);返回指定索引处的字符(Unicode代码点)。
8、 public int codePointBefore(int index);返回指定索引处前一个的字符(Unicode代码点)。
9、public int codePointCount(int beginIndex, int endIndex);返回指定索引区间的字符(Unicode代码点)。
10、public int offsetByCodePoints(int index, int codePointOffset);返回指定索引和指定偏移量间的代码点。
11、public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin);复制指定位置段的字符到指定位置。
12、public void setCharAt(int index, char ch);修改指定索引的字符。
13、public AbstractStringBuilder append(Object obj);附加对象的字符形式到当前容器。
14、public AbstractStringBuilder append(String str);附加字符串到当前容器。
15、 public AbstractStringBuilder append(StringBuffer sb);
16、AbstractStringBuilder append(AbstractStringBuilder asb);
17、public AbstractStringBuilder append(CharSequence s);
18、private AbstractStringBuilder appendNull();附加字符“null”。
19、public AbstractStringBuilder append(CharSequence s, int start, int end);附加指定索引字符序列。
20、public AbstractStringBuilder append(char[] str);
21、public AbstractStringBuilder append(char str[], int offset, int len);
22、 public AbstractStringBuilder append(boolean b);附加字符“true”或者false”。
23、public AbstractStringBuilder append(char c);
24、public AbstractStringBuilder append(int i);
25、public AbstractStringBuilder append(long l);
26、public AbstractStringBuilder append(float f);
27、public AbstractStringBuilder append(double d);
28、public AbstractStringBuilder delete(int start, int end);删除指定索引的字符段。
29、public AbstractStringBuilder appendCodePoint(int codePoint);附件序列。
30、public AbstractStringBuilder deleteCharAt(int index);删除指定字符。
31、public AbstractStringBuilder replace(int start, int end, String str);替换指定区间内字符。
32、public String substring(int start);返回指定起点的字符串。
33、public String substring(int start, int end);返回指定起止的字符串。
34、public CharSequence subSequence(int start, int end);返回指定区间的字符序列。
35、public AbstractStringBuilder insert(int index, char[] str, int offset,int len);插入字符串序列。
36、public AbstractStringBuilder insert(int offset, Object obj);插入对象的字符串形式序列。
37、public AbstractStringBuilder insert(int offset, String str);
38、public AbstractStringBuilder insert(int offset, char[] str);
39、public AbstractStringBuilder insert(int dstOffset, CharSequence s);
40、public AbstractStringBuilder insert(int offset, boolean b);
41、public AbstractStringBuilder insert(int offset, char c);
42、public AbstractStringBuilder insert(int offset, int i);
43、public AbstractStringBuilder insert(int offset, long l);
44、public AbstractStringBuilder insert(int offset, float f);
45、public AbstractStringBuilder insert(int offset, double d);
- append是附加到后面,而insert可以插入到指定位置
46、public int indexOf(String str);返回第一次出现指定字符串的索引。
47、public int indexOf(String str, int fromIndex);从指定索引位置起,返回第一次出现指定字符串的索引
48、public int lastIndexOf(String str);返回该字符串中最后出现指定子字符串的索引。
49、public int lastIndexOf(String str, int fromIndex);从指定索引位置起,返回最后出现指定子字符串的索引。
50、public AbstractStringBuilder reverse();
51、 public abstract String toString();
52、final char[] getValue();返回字符数组。

注:显然一些基本的操作都在子类中体现出来了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值