一、StringBuilder类
1. 由于String是不变对象,每次改变内容都要创建信的对象,非常的消耗内存
因为String不适用于做频繁的修改操作,为了解决这个问题,java提供了StringBuilder的类
currentTimeMillis()
这个时间是格林威治的时间1970年1月1日0时开始计算的毫秒数
字符串连接性能测试:
String str = "";
long t1 = System.out.currentTimemails()
for(int i=0;i<5000;i++){
str = str+"A";
}
long t2 = System.currentTimeMillis();
//第二次输出时间减去第一次时间
System.out.println(t2-t1);
long t1 = System.out.currentTimemails()
用时间毫秒数来测试
public static void main(String[] args) {
/*
current:当前的
TimeMills:时间毫秒数
1970年元旦开始到现在的毫秒数
*/
long now = System.currentTimeMillis();
System.out.println(now);
}
2. StringBuilder()构造一个不带任何字符的字符串生成器,其初始容量为16个字符.
StringBuilder称之为可变字符串
3. StringBuilder是专门用于修改String的一个API,内部维护的是一个可变的char数组,修改都是在这个数组上进行的,内部会自动扩容,修改速度和性能开销优秀
4. StringBuilder在lang包中,final修饰,维护的是char数组,该数组是没有final修饰,是可以直接修改其内部数组的内容
5. 当数组容量不足时候,会自动扩容,运算期间会减少创建数组的数量
6. String只适合查,可读性好.
7. Builder是适合修改字符串的,尤其是对字符串进行频繁的操作
StringBuilderAPI
1. append()方法:追加,在字符串的末尾进行追加
当容量满(数组满了)会自动扩容,扩容规则:1倍 +2(16——34——70——142)
public static void main(String[] args) {
/*
创建类名不要创建成StringBuilder
测试StringBuilder的连接性能
*/
StringBuilder buf = new StringBuilder();
long t1 = System.currentTimeMillis();
for(int i=0;i<5000;i++){
buf.append("A");
}
long t2 = System.currentTimeMillis();
System.out.println(t2-t1);
}
字符串出现了大量的内存开销,底层数组频繁的创建和销毁时非常消耗性能的
尽量少扩容性能是更好的
buf-> char[]{
A, C, B, 0, 0, 0, 0, 0, 0, 0, 0...0}
// 0 1 2 3 4 5
StringBuilder buf = new StringBuilder();
buf.append("A")
.append("A")
.append("A")
.append("B")
.insert(1,"C") //整体往后移动一位
.delete(2,4); //包括开始,不包括结束
Stirng str = buf.toString();
2. replace():替换部分内容,含头不含尾
方法中有三个参数:start,end,替换的字符串
int builder = "好好学习,天天向上!";
builder.replace(5,12,"为了改变世界");
System.out.println(builder);
3. delete():删除部分内容
方法中含有两个参数:start,end含头不含尾
int builder = "好好学习,为了改变世界!";
builder.delete(0,5);
System.out.println(builder);
4. insert():插入操作
两个参数:插入的位置,插入的字符串内容
builder.insert(0,"活着");
System.out.println(builder);
5. reverse():翻转字符串
没有参数
builder.reverse();
System.out.println(builder)