做网站提成,聊城市 网站制作,wordpress验证码无效,邢台招聘信息最新招聘2023StringBuffer、StringBuilder 文章目录 StringBuffer、StringBuilderStringBuffer和StringBuilder的理解可变性分析对于String对于StringBuilder 常用方法执行效率对比 StringBuffer和StringBuilder的理解 String 不可变的字符序列 StringBuffer 可变的字符序列 JDK1.0声明线程安全 , 效率低 StringBuilder 可变的字符序列 JDK5.0声明 线程不安全 效率高 可变性分析
对于String
String s1 new String() ; //char[] value new char[0];
String s2 new STring(abc); //char[] value new char[3]{a,b,c};对于StringBuilder
char []value; //存储字符序列
int count; //实际存储的字符个数
StringBuilder sBuffer1 new StringBuilder(); //char[] value new char[16];
StringBuilder sBuffer2 new StringBuilder(abc); //char[] value new char[16 abc.length];
sBuffer1.append(ab); //value[0] a; value[1] c;
sBuffer1.append(b); //value[2] b;
//最多修改16个
//一旦count超过value.length时就需要扩容
//默认扩容为原有容量的2倍 2 。 并将原有的value数组中的元素复制到新的数组中如果开发中需要频繁的针对于字符串进行 增删改 等操作 建议使用StringBuffer StringBuilder替换String 若不涉及线程安全问题建议使用StringBuffer 替换 StringBuilder 若大体确定需要操作的字符的个数建议使用int capacity的构造器避免底层多次扩容操作效率降低
常用方法
StringBuilder、StringBuffer的API是完全一致的并且很多方法与String相同。
//常用API
1StringBuffer append(xx)提供了很多的append()方法用于进行字符串追加的方式拼接
2StringBuffer delete(int start, int end)删除[start,end)之间字符
3StringBuffer deleteCharAt(int index)删除[index]位置字符
4StringBuffer replace(int start, int end, String str)替换[start,end)范围的字符序列为str
5void setCharAt(int index, char c)替换[index]位置字符
6char charAt(int index)查找指定index位置上的字符
7StringBuffer insert(int index, xx)在[index]位置插入xx
8int length()返回存储的字符数据的长度
9StringBuffer reverse()反转//其他API
1int indexOf(String str)在当前字符序列中查询str的第一次出现下标
2int indexOf(String str, int fromIndex)在当前字符序列[fromIndex,最后]中查询str的第一次出现下标
3int lastIndexOf(String str)在当前字符序列中查询str的最后一次出现下标
4int lastIndexOf(String str, int fromIndex)在当前字符序列[fromIndex,最后]中查询str的最后一次出现下标
5String substring(int start)截取当前字符序列[start,最后]
6String substring(int start, int end)截取当前字符序列[start,end)
7String toString()返回此序列中数据的字符串表示形式
8void setLength(int newLength) 设置当前字符序列长度为newLengthStringBuffer append(xx) public class StringBufferTest{public static void main(String []args){StringBuilder sBuilder new StringBuilder();sBuilder.append(abc).append(def); //方法链调用System.out.println(sBuilder); //abcdef}
}StringBuffer delete(int start, int end) public class StringBufferTest{public static void main(String []args){StringBuilder stringBuilder new StringBuilder(helloworld);System.out.println(stringBuilder.delete(5, stringBuilder.length())); //hello}}StringBuffer deleteCharAt(int index) public calss StringBufferTest{public static void main(String []args){StringBuilder stringBuilder new StringBuilder(Java);System.out.println(stringBuilder.deleteCharAt(0)); //ava}
}StringBuffer replace(int start, int end, String str) public class StringBufferTest{public static void main(String []args){StringBuilder stringBuilder new StringBuilder(Java);System.out.println(stringBuilder.replace(0, stringBuilder.length(), helloworld)); //helloworldSystem.out.println(stringBuilder); //helloworld}
}执行效率对比 效率排序 StringBuilder StringBuffer String public class RuntimeTest{public static void main(String []args){long startTime 0L;long endTime 0L;String text ;StringBuffer buffer new StringBuffer();StringBuilder builder new StringBuilder();startTime System.currentTimeMillis();for (int i 0; i 20000; i) {buffer.append(String.valueOf(i));}endTime System.currentTimeMillis();System.out.println(StringBuffer运行时间 (endTime - startTime));startTime System.currentTimeMillis();for (int i 0; i 20000; i) {builder.append(String.valueOf(i));}endTime System.currentTimeMillis();System.out.println(StringBuilder运行时间 (endTime - startTime));startTime System.currentTimeMillis();for (int i 0; i 20000; i) {text text i;}endTime System.currentTimeMillis();System.out.println(String运行时间 (endTime - startTime));}
}
//
//StringBuffer运行时间2
//StringBuilder运行时间1
//String运行时间274