Change Dir

          先知cd——熱愛生活是一切藝術的開始

          統計

          留言簿(18)

          積分與排名

          “牛”們的博客

          各個公司技術

          我的鏈接

          淘寶技術

          閱讀排行榜

          評論排行榜

          Rope與StringBuilder的簡單比較

          最近看了這篇文章 http://www.ibm.com/developerworks/cn/java/j-ropes/?S_TACT=105AGX52&S_CMP=techcsdn

          作者比較了String和StringBuffer與Rope結構的常用操作速度。并以實驗證明了Rope的性能。我在自己的機器上實驗,同樣也證明了Rope的高效,但是作者沒有用StringBuilder和Rope做比較,所以我們不妨一試。
          暫時的實驗結果表明,就append和delete操作而言,StringBuilder勝過Rope,那么Rope的真正優勢在哪里呢?時間倉促,沒有深入研究,特此立一文,以后細看其結構~~~

          我的測試代碼如下:

           1/**
           2 * 
           3 */

           4import java.io.*;
           5import java.util.*;
           6
           7import org.ahmadsoft.ropes.*;
           8
           9/**
          10 * @author Jia Yu
          11 * @date 2010-1-25
          12 */

          13public class Test2 {
          14
          15    /**
          16     * @param args
          17     */

          18    public static void main(String[] args) {
          19        // TODO Auto-generated method stub
          20
          21        int max = 100000;
          22        String eq = "";
          23        Rope r = Rope.BUILDER.build("");
          24        StringBuffer sb = new StringBuffer("");
          25        StringBuilder sb2 = new StringBuilder("");
          26
          27        double st = System.nanoTime();
          28        for (int i = 0; i < max; i++{
          29            eq += "h";
          30        }

          31        double ed = System.nanoTime();
          32        System.out.println(ed - st);
          33
          34        st = System.nanoTime();
          35        for (int i = 0; i < max; i++{
          36            sb.append("h");
          37            // sb.deleteCharAt(0);
          38        }

          39        ed = System.nanoTime();
          40        System.out.println((double) ed - (double) st);
          41
          42        st = System.nanoTime();
          43        for (int i = 0; i < max; i++{
          44            sb2.append("h");
          45            // sb2.deleteCharAt(0);
          46        }

          47        ed = System.nanoTime();
          48        System.out.println((double) ed - (double) st);
          49
          50        st = System.nanoTime();
          51        for (int i = 0; i < max; i++{
          52            r.append("h");
          53        }

          54        ed = System.nanoTime();
          55        System.out.println((double) ed - (double) st);
          56    }

          57}

          58


          結果如下:
          1.6120785922E10
          1.0273193E7
          2647639.0
          9781992.0
          只從數量級比較的話,String的低效就不說了,畢竟基于Char[]實現的,而StringBuffer比StringBuilder慢也可以理解,畢竟加入了同步的考慮,也算是為線程安全付出的代價,但是所謂的樹型機制的Rope還是比不過StringBuilder啊~~~

          Rope for Java 下載:點擊這里。
          這里附加了文章中的測試代碼:點擊這里。

          posted on 2010-01-25 15:20 changedi 閱讀(2225) 評論(4)  編輯  收藏 所屬分類: Java技術

          評論

          # re: Rope與StringBuilder的簡單比較[未登錄] 2010-01-25 17:49 dennis

          Rope for java也是線程安全的,同步開銷少不了。你拿它跟StringBuilder比就不大合適。  回復  更多評論   

          # re: Rope與StringBuilder的簡單比較[未登錄] 2010-01-25 17:51 Jason

          Rope還是比不過StringBuilder,Rope是同步的,StringBuilder不是同步的,性能上,當然要差一點。  回復  更多評論   

          # re: Rope與StringBuilder的簡單比較[未登錄] 2010-01-25 18:19 changedi

          原來如此啊~~~~
          怪不得原文作者不比較呢~~~
          看來有必要認真研究一下了~~
            回復  更多評論   

          # re: Rope與StringBuilder的簡單比較 2010-01-27 23:47 leekiang

          為什么有StringBuilder不用卻要去用Rope,不累嗎  回復  更多評論   

          主站蜘蛛池模板: 五指山市| 岫岩| 安达市| 赤峰市| 龙泉市| 仁化县| 白玉县| 烟台市| 阿合奇县| 台中县| 江华| 榕江县| 获嘉县| 都匀市| 调兵山市| 宝鸡市| 德州市| 黑水县| 万安县| 当雄县| 天津市| 珲春市| 信阳市| 通辽市| 吉水县| 邻水| 芜湖县| 自贡市| 横山县| 伊金霍洛旗| 霍林郭勒市| 京山县| 柳江县| 呼和浩特市| 响水县| 清水河县| 武安市| 横峰县| 广平县| 道真| 临颍县|