當前位置:編程學習大全網 - 編程語言 - 海量字符串如何進行快速操作

海量字符串如何進行快速操作

實例描述

字符串是程序開發中使用最頻繁的數據,在Java中字符串是String類的對象,它是不可變數據,當執行字符串連接操作時將生成新的字符串,而不是修改原有的字符串,所以大量的字符串操作非常耗時。本實例將分別演示使用String類與StringBuilder類進行3萬個字符串追加的操作,並輸出其運行時間。我們可以對比兩次方法執行的時間。運行效果如圖4.26所示。

實現過程

在Eclipse中新建項目BuilderString,並在其中創建壹個BuilderString.java文件。在該類的主方法中創建字符串對象appendStr,並通過循環為該字符串連接3萬個字符,計算並輸出其用時。再創建StringBuilder字符串構造器,同樣為其追加3萬個字符,計算並輸出其用時。核心代碼如下所示:

publicclassBuilderString{publicstaticvoidmain(String[]args){StringappendStr="";//創建字符串變量longstartTime=System.nanoTime();//開始記事for(inti=20000;i<50000;i++){//遍歷30000個字符appendStr+=(char)i;//字符串與每個字符執行連接操作}longendTime=System.nanoTime();//結束計時System.out.println("String追加字符3萬個。");//輸出用時System.out.println("用時:"+(endTime-startTime)/1000000d+"毫秒");StringBuilderstrBuilder=newStringBuilder();//創建字符串構建器startTime=System.nanoTime();//開始計時for(inti=20000;i<50000;i++){//遍歷30000個字符strBuilder.append((char)i);//把每個字符追加到構建器}endTime=System.nanoTime();//結束計時System.out.println("StringBuilder字符串構建器追加字符3萬個。");//輸出用時System.out.print("用時:"+(endTime-startTime)/1000000d+"毫秒");}}

代碼解析

從JDK5.0開始,Java增添了壹個單個線程使用的等價類,即StringBuilder。通常應該優先使用StringBuilder類,因為它支持所有相同的操作,但由於它不執行同步,所以速度更快。但是,如果將StringBuilder的實例用於多個線程是不安全的,這時我們則建議使用StringBuffer。

知識擴展

在性能強弱上:StringBuilder>StringBuffer>String。有關這三者的性能問題我們再提示以下幾點:

1.為了獲得更好的性能,在構造StringBuffer或StringBuilder時應盡可能指定它的容量。當然,如果妳操作的字符串長度不超過16個字符就不用了。

2.相同情況下使用StringBuilder與使用StringBuffer相比,僅能獲得10%~15%左右的性能提升,但卻要冒多線程不安全的風險。而在現實的模塊化編程中,負責某壹模塊的程序員不壹定能清晰地判斷該模塊是否會放入多線程的環境中運行,因此,除非能確定妳的系統瓶頸是在StringBuffer上,並且確定妳的模塊不會運行在多線程模式下,否則還是用StringBuffer。

3.用好現有的類比引入新的類更重要。很多程序員在使用StringBuffer時是不指定其容量的,如果這樣的習慣帶StringBuilder的使用中,只能獲得10%左右的性能提升;但如果使用指定容量的StringBuffer,將馬上獲得45%左右的性能提升,甚至比不使用指定容量的StringBuilder快30%左右。

  • 上一篇:余姚市藍天學校到萬達廣場有多遠
  • 下一篇:學音樂好還是學軟件技術,計算機方面的好?
  • copyright 2024編程學習大全網