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 阅读(1854) 评论(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,不累吗  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: