java“抓布娃娃的夹子”(迭代器Iterator)

来源:互联网 发布:sybase数据库入门 编辑:程序博客网 时间:2024/04/29 02:00

黑马程序员--老毕的“抓布娃娃的夹子”(迭代器Iterator)

 
转载

老毕在讲StringBuffer这个容器时,说出了他的“面盆理论”:StringBuffer就像个面盆,无论往面盆里放什么东西,或从面盆里取走什么东西,面盆始终还是面盆.亦即:对StringBuffer,无论增删改查,StringBuffer始终都是个容器(不是字符串).StringBuffer可以看作是一个长度可变的动态数组.

下面是对StringBuffer的一些介绍。

演示StringBuffer的一些常用方法.

class StringBufferDemo {
public static void main(String[] args) {
method_2();

}

public static void method_2() {
StringBuffer sb = new StringBuffer();

sb.append("abcdef");//往StringBuffer里添加字符串abcdef

sb.delete(1, 3);// 删去StringBuffer里的从1到3(包括1不包括3)的字符,即bc,那么还剩adef

sb.insert(2, "mn");// 在StringBuffer里的2位置插入mn,那么StringBuffer里变成了admnef

sb.replace(1, 3, "wc");// 把StringBuffer里的从1到3(包括1不包括3),那么StringBuffer里变成了awcnef

sb.setCharAt(1, 'k');// 把StringBuffer里的1位置上的字符替换为k,那么StringBuffer里变成了akcnef

System.out.println(sb);

sb.delete(0, sb.length());// 清空缓冲区
}
}

输出结果:akcnef

练习1.写出下面代码的输出结果。

class StringBufferDemo {
public static void main(String[] args) {

StringBuilder s1 = new StringBuilder("java");
StringBuilder s2 = new StringBuilder("hello");

show(s1, s2);
System.out.println(s1 + "...." + s2);

}

public static void show(StringBuilder s1, StringBuilder s2) {
s1.append(s2);//把s2里的字符添加到s1中,这改变的是堆内存中s1的值
s1 = s2;
}

输出结果:javahello....hello

个人分析:

1,容器的增删改等操作,作用于容器,即使是在局部方法里进行的,也具有全局的效果,因为new的StringBuilder对象是存储在堆内存上的.

2,StringBuilder:和StringBuffer使用方式是一样的。但是StringBuffer是线程安全的。
StringBuilder是线程不安全的(效率高)。建议开发时优先使用StringBuilder。当多线程时,可以使用StringBuffer

练习2.将一个int数组变成字符串。

// 使用String的方式。
public static String toString(int[] arr) {
String str = "";

for (int x = 0; x < arr.length; x++) {
if (x != arr.length - 1)
str = str + arr[x] + ", ";
else
str = str + arr[x];
}
return str;
}

// 使用StringBuilder的方式。
public static String toString2(int[] arr) {
StringBuilder sb = new StringBuilder();

for (int x = 0; x < arr.length; x++) {
if (x != arr.length - 1)
sb.append(arr[x] + ". ");
else
sb.append(arr[x]);
}
return sb.toString();
}

个人总结:

1,StringBuilder 和 String.
在进行累加时,String因为是相连接方式,会产生很多字符串对象。而StringBuilder 是在往一个容器中不断添加。效率要比String高

2,String和StringBuffer,

它们可以储存和操作字符串,即包含多个字符的字符数据。String类表示内容不可改变的字符串。而StringBuffer类表示内容可以被修改的字符串。当你知道字符数据要改变的时候你就可以使用StringBuffer。可以使用StringBuffer来动态构造字符数据。

0 0
原创粉丝点击