本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
![]() 5分9秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器
示例 2 : 长度 容量 示例 3 : 练习-StringBuffer性能 示例 4 : 答案-StringBuffer性能 示例 5 : 练习-MyStringBuffer 示例 6 : 答案-MyStringBuffer
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之间的字符
System.out.println(sb);
sb.insert(4, "there ");//在4这个位置插入 there
System.out.println(sb);
sb.reverse(); //反转
System.out.println(sb);
}
}
为什么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());//总空间
}
}
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());//总空间 } }
String与StringBuffer的性能区别?
生成10位长度的随机字符串 然后,先使用String的+,连接10000个随机字符串,计算消耗的时间 然后,再使用StringBuffer连接10000个随机字符串,计算消耗的时间 提示: 使用System.currentTimeMillis() 获取当前时间(毫秒)
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
![]() 7分27秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 package character;
public class TestString {
public static void main(String[] args) {
int total = 10000;
String s = randomString(10);
StringBuffer sb = new StringBuffer();
String str1 = "";
long start = System.currentTimeMillis();
for (int i = 0; i <total; i++) {
str1+=s;
}
long end = System.currentTimeMillis();
System.out.printf("使用字符串连接+的方式,连接%d次,耗时%d毫秒%n",total,end-start);
total *=100;
start = System.currentTimeMillis();
for (int i = 0; i <total; i++) {
sb.append(s);
}
end = System.currentTimeMillis();
System.out.printf("使用StringBuffer的方式,连接%d次,耗时%d毫秒%n",total,end-start);
}
private static String randomString(int length) {
String pool = "";
for (short i = '0'; i <= '9'; i++) {
pool += (char) i;
}
for (short i = 'a'; i <= 'z'; i++) {
pool += (char) i;
}
for (short i = 'A'; i <= 'Z'; i++) {
pool += (char) i;
}
char cs[] = new char[length];
for (int i = 0; i < cs.length; i++) {
int index = (int) (Math.random() * pool.length());
cs[i] = pool.charAt(index);
}
String result = new String(cs);
return result;
}
}
根据接口IStringBuffer ,自己做一个MyStringBuffer
package character;
public interface IStringBuffer {
public void append(String str); //追加字符串
public void append(char c); //追加字符
public void insert(int pos,char b); //指定位置插入字符
public void insert(int pos,String b); //指定位置插入字符串
public void delete(int start); //从开始位置删除剩下的
public void delete(int start,int end); //从开始位置删除结束位置-1
public void reverse(); //反转
public int length(); //返回长度
}
package character; public interface IStringBuffer { public void append(String str); //追加字符串 public void append(char c); //追加字符 public void insert(int pos,char b); //指定位置插入字符 public void insert(int pos,String b); //指定位置插入字符串 public void delete(int start); //从开始位置删除剩下的 public void delete(int start,int end); //从开始位置删除结束位置-1 public void reverse(); //反转 public int length(); //返回长度 }
package character;
public class MyStringBuffer implements IStringBuffer{
}
package character; public class MyStringBuffer implements IStringBuffer{ }
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
因为这个答案比较复杂,为了便于理解和消化,专门开了一个章节来讲解这个答案: MyStringBuffer
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
![]()
问答区域
2022-05-27
答案
1 个答案
xbt15986691693 跳转到问题位置 答案时间:2023-05-15 public static void main(String[] args) {
String str1 = "let there ";
StringBuffer sb =new StringBuffer(str1);
sb.delete(4,10);
sb.insert(4,"aaa");
sb.reverse();
System.out.println(sb+""+sb.length()+sb.capacity());
String zfc=random(10) ;
System.out.println(zfc);
long startTime=System.currentTimeMillis();
for(int i=0;i<10000;i++){
zfc+=random(10);
}
long endTime=System.currentTimeMillis();
System.out.println(endTime-startTime);
StringBuffer sf=new StringBuffer(zfc);
long startTime2=System.currentTimeMillis();
for(int i=0;i<10000;i++){
sf.append(random(10));
}
long endTime2=System.currentTimeMillis();
System.out.println(endTime2-startTime2);
}
public static String random(int length){
String result ="";
for(short i=0;i<=9;i++){
result+=(char)i;
}
for(short i='a';i<='z';i++){
result+=(char)i;
}
for(short i='A';i<='Z';i++){
result+=(char)i;
}
char[] chars =new char[length];
for(int i=0;i<chars.length;i++){
int index=(int)(Math.random()*result.length());
chars[i] =result.charAt(index);
}
String result1=new String(chars);
return result1;
}
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2022-05-10
练习1
1 个答案
芬达味橘猫 跳转到问题位置 答案时间:2022-05-27 import java.util.Random;
public class s7 {
public static void main(String[] args) {
long sstart = System.currentTimeMillis();
Random rand = new Random();
String letter = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
String tomas = "";
String str;
for (int i = 0;i<10000;i++) {
str = String.valueOf(letter.charAt(rand.nextInt(letter.length())));
tomas += str;
}
long ssend = System.currentTimeMillis();
long ssys = ssend - sstart;
System.out.println("使用字符串连接,连接10000次,耗时"+ssys+"毫秒");
String wang = "";
long sbstart = System.currentTimeMillis();
StringBuffer sb = new StringBuffer(wang);
for (int i = 0;i<10000;i++) {
sb.append(letter.charAt(rand.nextInt(letter.length())));
}
long sbend = System.currentTimeMillis();
long sbys = sbend - sbstart;
System.out.println("使用StringBuffer连接,连接10000次,耗时"+sbys+"毫秒");
}
}
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2022-03-03
我自己的答案,很笨的答案,不过挺容易懂的。
2021-06-15
答案
2021-05-14
练习MyStringBuffer
提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 37 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|