Change Dir

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

          統(tǒng)計

          留言簿(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的真正優(yōu)勢在哪里呢?時間倉促,沒有深入研究,特此立一文,以后細看其結構~~~

          我的測試代碼如下:

           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
          只從數(shù)量級比較的話,String的低效就不說了,畢竟基于Char[]實現(xiàn)的,而StringBuffer比StringBuilder慢也可以理解,畢竟加入了同步的考慮,也算是為線程安全付出的代價,但是所謂的樹型機制的Rope還是比不過StringBuilder啊~~~

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

          posted on 2010-01-25 15:20 changedi 閱讀(2227) 評論(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,不累嗎  回復  更多評論   

          主站蜘蛛池模板: 仁化县| 肇州县| 固原市| 泰安市| 姜堰市| 毕节市| 民权县| 泽库县| 洞头县| 禹城市| 眉山市| 克拉玛依市| 秦皇岛市| 珠海市| 达孜县| 晋城| 孟连| 红河县| 商水县| 万年县| 闽清县| 虎林市| 岗巴县| 清水县| 新津县| 连江县| 石家庄市| 班戈县| 鹰潭市| 宁强县| 株洲县| 宜兰县| 德清县| 铜梁县| 黑河市| 温州市| 柘城县| 莲花县| 青州市| 遂川县| 于都县|