
java 如何提高字符串拼接速度
7个回答
展开全部
使用StringBuffer,或者StringBuilder..都是可以改变是字符串。
展开全部
java1.0开始就有的StringBuffer,以及后期参考.net后在1.5版本增加的StringBuilder都行
当然StringBuilder是后期参考.net优化过的,性能比StringBuffer更好
然后调用他们的append方法,来追加,达到拼接字符串的目的,最后通过他们的toString方法转回String类型
例如:StringBuffer sb = new StringBuffer("a");
sb.append("b");
sb.append("c");
sb.append("d");
String s = sb.toString();
System.out.println(s);
当然StringBuilder是后期参考.net优化过的,性能比StringBuffer更好
然后调用他们的append方法,来追加,达到拼接字符串的目的,最后通过他们的toString方法转回String类型
例如:StringBuffer sb = new StringBuffer("a");
sb.append("b");
sb.append("c");
sb.append("d");
String s = sb.toString();
System.out.println(s);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要实现高效字符串操作,在工作中尽量不要用String
都是用StringBuilder ,速度快 ,只是线程不安全
也有用StringBuffer 虽然线程安全,但速度还是慢
都是用StringBuilder ,速度快 ,只是线程不安全
也有用StringBuffer 虽然线程安全,但速度还是慢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
应该使用 StringBuilder
为什么不用 StringBuffer,因为StringBuffer的每一次操作之前都要取得同步锁,每一次操作之后都要释放同步锁。
看下面这个例子:
for(int i=0; i<10000; i++)
buffer.append(i).append(", ");
这里获取了10000次锁,释放了10000次锁,那么,它真的实现了同步的目的吗?如果在这个循环运行过程中,有另一个进程对buffer进行了这样的操作: buffer.append("some string");
那么这个"some string" 会被插入到某两个数字之间,如果你想要前面那个for循环不受干扰地完成,还是要在外面加锁:
synchronized(buffer) {
for(int i=0; i<10000; i++)
buffer.append(i).append(", ");
}
所以StringBuffer这个类的设计是有缺陷的,是由于当时受限于人们对API设计理论的理解,类的设计者不明白这样一个道理:一个类不应该自己实现同步,而应该把同步的工作交给用户,因为“用户对于什么时候应该同步,应该怎么同步,通常比类的设计者知道得更清楚,并且在不同的环境下用户可能对如何同步有不同的需求”。
所以在新的代码中应该尽量用 StringBuilder 而不要用 StringBuffer。
同理,应该用 ArrayList 而不要用 Vector。
为什么不用 StringBuffer,因为StringBuffer的每一次操作之前都要取得同步锁,每一次操作之后都要释放同步锁。
看下面这个例子:
for(int i=0; i<10000; i++)
buffer.append(i).append(", ");
这里获取了10000次锁,释放了10000次锁,那么,它真的实现了同步的目的吗?如果在这个循环运行过程中,有另一个进程对buffer进行了这样的操作: buffer.append("some string");
那么这个"some string" 会被插入到某两个数字之间,如果你想要前面那个for循环不受干扰地完成,还是要在外面加锁:
synchronized(buffer) {
for(int i=0; i<10000; i++)
buffer.append(i).append(", ");
}
所以StringBuffer这个类的设计是有缺陷的,是由于当时受限于人们对API设计理论的理解,类的设计者不明白这样一个道理:一个类不应该自己实现同步,而应该把同步的工作交给用户,因为“用户对于什么时候应该同步,应该怎么同步,通常比类的设计者知道得更清楚,并且在不同的环境下用户可能对如何同步有不同的需求”。
所以在新的代码中应该尽量用 StringBuilder 而不要用 StringBuffer。
同理,应该用 ArrayList 而不要用 Vector。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
StringBuilder和StringBuffer
推荐用StringBuilder。原因参考“那十无忧”的回答!
推荐用StringBuilder。原因参考“那十无忧”的回答!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询