字串串連的效能(Effective java)- -

來源:互聯網
上載者:User

轉貼來自: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方法,或者採用其他的方案,比如使用字元數組,或者每次只處理一個字串,而不是把他們組合起來。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.