我是靠谱客的博主 平淡楼房,最近开发中收集的这篇文章主要介绍字符串连接的性能(Effective java)- -,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

转贴来自:http://anonymous.bokee.com/875294.html

字符串的连接操作符(+,string concatenations operator);如果是产生一行输出,或者是产生小的,大小固定的对象用+是很合适的,但是对于大规模的情形;因为为了连接n个字符串而重复使用字符串连接符,要求n的平方级时间。(字符串是不可变的,两个字符串被连接的时候,他们的内容都要被拷贝)

这里有个例子能说明这点:......


+-------CODE------------+
public class StringEffective
{  
    public static void main(String args[])
    {
        String s="abc";
        StringBuffer sb=new StringBuffer(100);
        int circle=100000;
        long t1=System.currentTimeMillis();
        for(int i=0;i<circle;i++)
        {
            s+="a";
        }
        long t2=System.currentTimeMillis();
        System.out.println("[String] Time: <"+(t2-t1)+">");
        t1=System.currentTimeMillis();
        for(int i=0;i<circle;i++)
        {
            sb.append("a");
        }
        t2=System.currentTimeMillis();
        System.out.println("[StringBuffer] Time: <"+(t2-t1)+">" );
    }
}
/**
 *circle=100
 *result:
 *[String] Time: <0>
 *[StringBuffer] Time: <0>
 *+---------------------------+
 *circle=1000
 *result:
 *[String] Time: <15>
 *[StringBuffer] Time: <0>
 *+---------------------------+
 *circle=10000;
 *result;
 *[String] Time: <954>
 *[StringBuffer] Time: <0>
 *+---------------------------+
 *circle=100000
 *result:
 *[String] Time: <526828>
 *[StringBuffer] Time: <15>
 */
+------------END---------------------+
第一种方法所使用的时间是指数式增长,而第二种是,使他线性增长,所以,项目足够大的话,性能的差别就更显著。需要注意的是,第二种做法事先分配了一个StringBuffer,使他足够大以便能够容纳结果字符串。不过即使不知道结果字符串的大小,使用一个默认的大小的StringBuffer,他仍然比第一种做法快45倍。
所以总结一些,用Joshua Bloch的话说:不要使用字符串连接操作符来合并多个字符串,除非性能无关紧要。相反,应该使用StringBuffer的append方法,或者采用其他的方案,比如使用字符数组,或者每次只处理一个字符串,而不是把他们组合起来。

最后

以上就是平淡楼房为你收集整理的字符串连接的性能(Effective java)- -的全部内容,希望文章能够帮你解决字符串连接的性能(Effective java)- -所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部